> Date: Thu, 20 Oct 2011 08:42:13 +0200
> From: smuel...@cpan.org
> To: jianding...@msn.com
> CC: perl-xs@perl.org
> Subject: Re: perl binding for C++ ref-counted object
> 
> 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

I've got a more nasty idea: all I need is refcount and garbage collection, so I 
can just embed an perl HV inside my object, and use the reference count of that 
HV.
Woo! Too ugly!
I'll try the C++ part this weekend.                                       

Reply via email to