[Rcpp-devel] Idiom for preserving an Rcpp object while passing back an external pointer?
Douglas Bates
bates at stat.wisc.edu
Sat Feb 5 15:52:13 CET 2011
As Dirk and Romain know I have been struggling to debug a memory
protection problem that I encounter in code based on Rcpp Modules. As
with all memory protection problems, it is very difficult to track
down and I have kind-of run out of options right now.
I plan, for the time being, to use code that acts like the
module-based code without going through the modules. I plan to create
the object in C++ and pass back an external pointer that will be used
to locate the object for later method calls. Perhaps it is lack of
imagination but I haven't thought of a way to construct an object and
make it persistent until I decide to release the pointer. The best
way I have been able to derive is to put the C++ object on a global
stack but that approach screams "error-prone".
My question may be somewhat vaguely stated. What I am trying to avoid
is creating an object in C++ and returning an Rcpp::XPtr then, on
return to R, having the C++ object go out of scope so the external
pointer's target is gone. Somehow I need to hold on to the C++ object
until the XPtr object is garbage collected.
Suggestions welcome.
More information about the Rcpp-devel
mailing list