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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.