Sometimes I would like to abort the construction of an object, e.g., when the parameters are not sane. In this cases, I do not want the Rcpp/S4 object to be created. An example: The user types > a <- new(A, p1) where A is my C++ class, exposed to R via Rcpp, and p1 is a parameter. If p1 is invalid (not in a certain range), I do _not_ want 'a' to exist after this line. Currently, I check the parameter in the C++ constructor of A and throw an exception if it is invalid. This is the standard way of exiting a C++ constructor without actually constructing anything. As expected, this leads to the output (preceded by my own, meaningful error message) Error in new_CppObject_xp(fields$.module, fields$.pointer, ...) : std::exception Afterwards, trying to access 'a' yields > a$p1 Error: Object 'a' not found. So far, this is exactly what I want! The problem here is: Obviously some kind of object _is_ created. When the garbage collection finally kicks in at random times, I get the unexpected additional error Error in x$.self$finalize() : Object '.pointer' not found. How can I avoid this? Is there a better way to abort the construction of an object or to destroy the invalid S4 object immediately? Best regards, Peter
[Rcpp-devel] Abort object construction, Exceptions
1 message · schattenpflanze at arcor.de