[Insight-users] returning a smart pointer from a function

Dan Mueller dan.muel at gmail.com
Sun Feb 6 15:34:17 EST 2011


Thank Jim,

Seems I wrote my email too quickly, and didn't give enough thought.
You are correct on all accounts. Thanks for clarifying my remarks.

Cheers, Dan

On 6 February 2011 18:59, Jim Miller <millerjv at gmail.com> wrote:
> Because the reader is going out of scope, you shouldn't need the DisconnectPipeline() call. I will sometimes use one is such circumstances to be clear that I want the filters to go away.
>
> Note that to do this properly, you would need to assign the output to a local variable (smart pointer), then call DisconnectPipeline on the local variable, and finally return the local variable (and not output of the reader).
>
> If you were to call DisconnectPipeline on the output of the reader directly the data you just read would be lost and a new empty output would be created.
>
> Jim
>
>
>
> On Feb 6, 2011, at 11:33 AM, Dan Mueller <dan.muel at gmail.com> wrote:
>
>> Hi Ricardo,
>>
>> I would also add a call to reader->GetOutput()->DisconnectPipeline()
>> (after the reader->Update() call) to make sure the image is
>> disconnected from the pipeline... Other than that, this function seem
>> fine.
>>
>> HTH
>>
>> Cheers, Dan
>>
>> On 6 February 2011 17:27, Ricardo Ferrari <rjf.araraquara at gmail.com> wrote:
>>> Hi guys,
>>>
>>> I am just wondering if is there any disadvantage in using the following
>>> function to encapsulate the image file reading.
>>>
>>> Thank you,
>>> Ricardo
>>>
>>>
>>> ///
>>> ************************************************************************************************************
>>> ///
>>> ///
>>> ************************************************************************************************************
>>> template< typename TImageType >
>>> typename TImageType::Pointer ReadImage( const std::string fileName )
>>> {
>>>     typedef itk::ImageFileReader< TImageType >    ImageFileReader;
>>>     typename ImageFileReader::Pointer reader = ImageFileReader::New();
>>>     reader->SetFileName( fileName );
>>>
>>>     try
>>>     {
>>>         reader->Update();
>>>     }
>>>     catch (... )
>>>     {
>>>         std::cout << "Error while reading in image" << fileName <<
>>> std::endl;
>>>         throw;
>>>     }
>>>
>>>     return reader->GetOutput();
>>> }
>>>
>>>
>>> The function is used as follows:
>>>
>>> InputImageType::Pointer img = ReadImage< InputImageType >( inputFileName );
>> _____________________________________
>> Powered by www.kitware.com
>>
>> Visit other Kitware open-source projects at
>> http://www.kitware.com/opensource/opensource.html
>>
>> Kitware offers ITK Training Courses, for more information visit:
>> http://www.kitware.com/products/protraining.html
>>
>> Please keep messages on-topic and check the ITK FAQ at:
>> http://www.itk.org/Wiki/ITK_FAQ
>>
>> Follow this link to subscribe/unsubscribe:
>> http://www.itk.org/mailman/listinfo/insight-users
>


More information about the Insight-users mailing list