[PyQt] SIP: how to transfer ownerships

Martin Dobias wonder.sk at gmail.com
Fri Oct 12 01:56:10 BST 2007


Hi,

I'm trying to find out how to wrap one class but I'm not sure how to
do it correctly...

I have a class which owns a geometry class. The geometry can be at
some point of time detached from the class (and deleted elsewhere):

class Feature
{
public:
  [...]
  // returns only reference
  Geometry* getGeometry() { return geom; }
  // marks that it's not responsible for geometry's deletion anymore
  Geometry* getGeometryAndOwnership() { ownsGeometry = 0; return geom; }
  // deletes the geometry if it's still owning it
  ~Feature() { if (ownsGeometry) delete geom; }
private:
  bool ownsGeometry;
  Geometry* geom;
};

My question is - what annotations should I use for the getter
functions? I guess I should use TransferBack for
getGeometryAndOwnership() as it takes the responsibility for deletion.
But what about getGeometry() ? When used without any annotation I have
a problem in this scenario:
1. feature is created
2. getGeometry is called and the reference is stored
3. feature is deleted
4. reference in python still exists but the object is deleted already...

Thanks,
Martin


More information about the PyQt mailing list