I want to expose to R several C++ classes from a library with Rcpp modules. I'm trying to imitate a similar set of Python modules that were made for the same library.
In Boost.Python, with .def it is possible to specify the return_value_policy. Is it also possible to do this in a straight forward way with Rcpp modules when exposing C++ class methods? The following simplified example illustrates a problem I face with using Rcpp modules. When R deletes 'res', R crashes shortly after (a segfault?). With a Python module, this kind of problem apparently doesn't come about by setting in .def the following: return_value_policy<reference_existing_object>() Is there an easy way to get around this problem with Rcpp modules with minimal code? #include <Rcpp.h> using namespace Rcpp; class A { public: A(int x_) : x(x_){} int x; }; class B { public: B():m_A(10) {} A get_an_A(){ A an_A(3); return an_A; } A * get_member_A() { return & m_A; } private: A m_A; }; RCPP_EXPOSED_CLASS(A) RCPP_EXPOSED_CLASS(B) RCPP_MODULE(AB_mod){ using namespace Rcpp ; class_<A>("A") .constructor<int>() .field("x", &A::x) ; class_<B>("B") .constructor() .method("get_an_A",&B::get_an_A) .method("get_member_A", &B::get_member_A) ; } ------------------------ R code: A_eg <- new(A, 10) B_eg <- new(B) res <- B_eg$get_member_A() rm(res) # R crashes shortly after running further commands ... # How can this error be prevented?
_______________________________________________ Rcpp-devel mailing list Rcpp-devel@lists.r-forge.r-project.org https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel