[Rd] asking for suggestions: interface for a C++ class

Seth Falcon seth at userprimary.net
Fri Sep 4 23:17:23 CEST 2009

* On 2009-09-04 at 22:54 +0200 Yurii Aulchenko wrote:
> We are at an early stage of designing an R library, which is effectively an 
> interface to a C++ library providing fast access to large matrices stored 
> on HDD as binary files. The core of the C++ library is relatively 
> sophisticated class, which we try to "mirror" using an S4 class in R. 
> Basically when a new object of that class is initiated, the C++ constructor 
> is called and essential elements of the new object are reflected as slots 
> of the R object.

Have a look at external pointers as described in the Writing R
Extensions Manual.

> Now as you can imagine the problem is that if the R object is removed using 
> say "rm" command, and not our specifically designed one, the C++ object 
> still hangs around in RAM until R session is terminated. This is not nice, 
> and also may be a problem, as the C++ object may allocate large part of 
> RAM. We can of cause replace generic "rm" and "delete" functions, but this 
> is definitely not a nice solution.

You likely want a less literal translation of your C++ object into R's
S4 system.  One slot should be an external pointer which will give you
the ability to define a finalizer to clean up when the R level object
gets gc'd.

+ seth

Seth Falcon | @sfalcon | http://userprimary.net/user

More information about the R-devel mailing list