[Insight-developers] Returning a smart pointer or a pointer?

Luis Ibanez luis.ibanez at kitware.com
Mon May 19 13:35:25 EDT 2008


Hi Tom, Bill, Ken,

Here is a suggestion:


1) Add a new method called


       FieldType * GetDeformationFieldPointer()

    or

       FieldType * GetDeformationFieldRawPointer()

   Then track from where in ITK the original method
   was being called, and replace it with this new
   one.


2) This may also require to do the same function
    addition in the base classes of the PDFDeformable
    RegistrationFunction, and its derived classes,
    as well as the invocation of that method from
    all the classes.

This will keep the original method around, and still
should help to solve the performance issue inside ITK.

Additionally, we should add a comment in the GetDeformationField()
method, warning users that the use of this method involves a
performance penalty and the an alternative, faster method,
is available.


    Luis


-------------------------
Tom Vercauteren wrote:
> Hi all,
> 
> 
>>The change will affect users that create a subclass and override the method.
> 
> This was indeed the backwards compatibility issue I was thinking of. I
> just cannot really figure why someone would do something like that...
> But as Bill said, this is unpredictable.
> 
> 
> 
>>>a) When the object to be returned is a member variable of the
>>>  class, then a raw pointer is returned, and preferably a
>>>  "const" raw pointer.
>>>
>>>
>>>b) When the object to be returned is a newly created object,
>>>  then a SmartPointer is the preferred method, since it will
>>>  force users of this class to receive the value in a SmartPointer
>>>  and will prevent the returned object from "death in transit".
> 
> Ok thanks for the clarification.
> 
> 
>>How much of a performance hit are you seeing?
>>
>>Maybe we will have to define a new method? Are their other classes
>>that have the same p[problem?
> 
> I don' remember the exact performance hit. I was at least a few
> percents since it was appearing on the profiler output. I haven't seen
> any other problematic methods but haven't looked for it. I just check
> the one that was appearing on the profiler output.
> 
> 
>>What this function returns is a handle on an image. I fail to see the case
>>where you'd be dereferencing this smart pointer often enough to affect
>>program performance. If you are, you probably need to be using
>>itk::ImageRegionIterator, or hoist calls to access methods via smart
>>pointers outside of inner loops.
> 
> I understand that, but I am not responsible for the code calling this
> method. It was somewhere in the demons registration hierarchy.
> 
> Tom
> 


More information about the Insight-developers mailing list