> 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.