Re: perl binding for C++ ref-counted object
[email protected] (Steffen Mueller)
| Newsgroups | perl.xs |
|---|---|
| Message-ID | <[email protected]> |
Hi YanXi, On 10/17/2011 05:25 AM, YangXi wrote: > I'm asking a question about how to wrapping a refcounted class inside perl. > > I have some experience on embedding perl in C++, but have little > knowledge on perl XS, and I found perldoc perlxs really puzzled. > > Firstly, I have an simple refcounted C++ base class like this: I'm sorry that this isn't a solution for your problem, but maybe it's helpful nonetheless. Object ownership and refcounts are something extremely nasty to deal with when interfacing between two languages that have a very different view of it. For this reason, it's easiest not to have C++ do the refcounting at all. I understand that this might not be possible in your case. If you just have a regular, non-refcounting object in C++, you can easily use typemaps like O_OBJECT from http://cpansearch.perl.org/src/MBARBON/ExtUtils-XSpp-0.1602/examples/Object-WithIntAndString/perlobject.map to have the object wrapped into a Perl scalar. The C++ object will be owned by that scalar and the refcount will be perl's refcount of the SV*. In that case a simple DESTROY XS method will suffice along the lines of the DESTROY here: http://cpansearch.perl.org/src/SMUELLER/Math-SimpleHisto-XS-1.23/XS.xs The macro in that case can often be replaced by "delete self" for C++ objects. I hope this has some general pointers that help a bit. Best regards, Steffen