[Qgis-developer] SIP and transfer of ownership

Chris Crook ccrook at linz.govt.nz
Sat Oct 11 11:35:46 PDT 2014


Hi

I'm just looking at the QgsGraduatedSymbolRendererV2 SIP and wanting to check my understanding of the use of /Transfer/

I think this is used to transfer ownership of an object.  So for example the renderer includes the member function

    void setSourceColorRamp( QgsVectorColorRampV2* ramp /Transfer/ );

So this could be used from python with code something like

    ramp=myColorRamp()
    renderer.setSourceColorRamp(ramp)

However if you were using the same ramp in two places, then you'd need to make sure that you didn't pass the same object to both, so you might have something like

   ramp=myColorRamp()
   renderer1.setSourceColorRamp(ramp.clone())
   renderer2.setSourceColorRamp(ramp.clone())

Is this right?

If so, then I wonder if having to pay attention to this sort of memory allocation/ownership issue is not very "pythonic".

Would it be better to set up the SIP so that it always used the clone() function, and so that a python coder didn't have think about whether they might have yielded ownership of a python object.  Presumably there is a way to write the SIP to do this?  And would this create issues in those environments (eg windows 64) where the transfer function doesn't seem to work reliably, and python subclassed objects need to be deliberately kept alive?

Cheers
Chris

This message contains information, which may be in confidence and may be subject to legal privilege. If you are not the intended recipient, you must not peruse, use, disseminate, distribute or copy this message. If you have received this message in error, please notify us immediately (Phone 0800 665 463 or info at linz.govt.nz) and destroy the original message. LINZ accepts no responsibility for changes to this email, or for any attachments, after its transmission from LINZ. Thank You.


More information about the Qgis-developer mailing list