From: Josh C. <jc...@nc...> - 2007-08-15 15:21:14
|
On Tue, 14 Aug 2007, David Piepgrass wrote: > There have been a couple of threads on this before but surprisingly it > hasn't gone anywhere. > > "Questions about Smart Pointer support in SWIG" > http://article.gmane.org/gmane.comp.programming.swig/3832/match=referenc > e+count > "Back to the reference counting problem... and the "derivability" > option" > http://article.gmane.org/gmane.comp.programming.swig/276/match=back+refe > rence+counting > > I need some help to get reference counting working. In my C++ code I use > smart pointers, but I don't want SWIG to produce bloated results by > duplicating the original classes in the smart pointer classes. > > First of all, SWIG has a built-in memory management system involving the > concept of "ownership". I don't know how that would interact with > reference counting, so how do I disable it for a ref-counted class (so > that all instances of the wrapper act like they are the owner?) > > I'd like to do reference counting in a "generic" way if possible, > without rewriting typemaps for every reference-counted class. So, let's > say I want to wrap this class: I have a system for dealing with this. It took some effort to set up, but it works. What I do for the actual objects (and regular pointers and references to them) is described at http://article.gmane.org/gmane.comp.programming.swig/7851. For smart pointers, I provide "out" typemaps that make a regular pointer proxy and adjust the reference count appropriately. I also provide "in" typemaps and typechecks that accept a regular pointer. These typemaps go in a smart pointer template declaration, so they only need to appear once. I use %template() with empty parentheses to apply the typemaps without making full wrappers for the smart pointer classes. Users see only objects (not smart pointers), but the objects magically have reference-counted semantics. Josh |