[C++-sig] Indexing_suite when container is newed
Niall Douglas
s_sourceforge at nedprod.com
Wed Oct 15 18:30:55 CEST 2003
Right, last error in the last file - everything else compiles! I have
a method called lasso() in FXGLViewer which returns an array of
FXGLObject pointers falling within the specified coordinates.
Unfortunately the list returned is malloced and if not freed after
python is done with it would leak memory. My initial attempt was as
below:
static indexing::iterator_pair<FXGLObject **>
FXGLViewer_lasso(FXGLViewer &c, FXint x1,FXint y1,FXint x2,FXint y2)
{
typedef indexing::iterator_pair<FXGLObject **> IterPair;
class_<IterPair>( "FXGLViewer_lassoIndirect", init<FXGLObject **,
FXGLObject **>())
.def(indexing::container_suite<IterPair>
::with_policies(return_value_policy<manage_new_object>()));
FXGLObject **data=c.lasso(x1,y1,x2,y2);
return IterPair(data, data+(1<<16));
}
However it would appear that setting a policy at the container_suite
level sets it for the iterator_pair which isn't what I want. Anyway
besides the list is malloced and not newed, though in fact I've
replaced new and delete with my own versions which do call malloc.
What one would want is the ability to call a destructor when the
iterator_pair is destroyed. Unfortunately I can't hack in a
destructor because it gets lost in the downcast and I can't use
auto_ptr because both of the iterators must be the same type (and the
end of array is not a valid memory location). So I'm guessing it
needs added support.
I'd imagine copy construction needs to be destructive so myBegin and
myEnd would need to become mutable and one would need a user-
overridable destructor.
Or perhaps one could create a new custom type of return policy and
set that instead?
Thoughts?
Cheers,
Niall
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 208 bytes
Desc: not available
URL: <http://mail.python.org/pipermail/cplusplus-sig/attachments/20031015/e3033c03/attachment.pgp>
More information about the Cplusplus-sig
mailing list