[Rcpp-devel] R_PreserveObject and R_ReleaseObject

Simon Dirmeier simon.dirmeier at web.de
Thu Aug 16 10:10:53 CEST 2018


Dear all,

I have a question about /R_PreserveObject /and/R_ReleaseObject 
/and//thought this would be good place to post it.
I apologize if the question is not suitable or naive.

Suppose I have something like the class below for which I use 
Rcpp-modules to extend it to R (code not shown).
I use "insert" to add key-value pair to a map and "remove" to remove an 
entry.

I am not having memory issues or so, but the solution seems wrong to me 
and I am concerned that it causes problems.
Could you please give me some advice if this implementation is wrong or 
unefficient?

Thank you in advance.
Best,
Simon

template<typename T>
class map
{
public:
     map() = default;

     size_t size()
     {
         return map_.size();
     }

     void insert(T& t, SEXP u)
     {
         SEXP s = Rf_duplicate(VECTOR_ELT(u, i));
         R_PreserveObject(s);

         map_.insert(std::pair<T, SEXP>(t[i], s));
     }

     void remove(T& t)
     {
             auto iter = map_.equal_range(t);
             for (auto it = iter.first; it != iter.second; ++it)
             {
                 R_ReleaseObject(it->second);
             }
             map_.erase(t);
     }

private:
     std::unordered_map<T, SEXP> map_;
};



-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments/20180816/0253e173/attachment.html>


More information about the Rcpp-devel mailing list