[vtkusers] Reference counting in 6.3
David Cole
DLRdave at aol.com
Fri Oct 23 17:07:42 EDT 2015
There is nothing that guarantees the reference count of an object
derived from vtkObject will be any certain value immediately after
construction.
It totally depends on what happens to the object during its
constructor. It might set up a whole network of other objects, and
then give references to itself to some of them. Some of them might
increase the reference count of the object, some of them might not.
If you call Register, the reference count goes up. If you call
Unregister, it goes down. If it goes down far enough, the object's
destructor is called and the memory is released.
The mechanism itself has not changed significantly lately (that I know
of...), but individual objects may have changed their behavior with
respect to "what's the reference count immediately after construction"
or " what's the count after a single or repeated calls to
SetInputConnection..."
You should not rely on the reference count value for anything other
than automatic cleanup when no more references exist.
HTH,
David C.
On Fri, Oct 23, 2015 at 4:24 PM, Weiguang guan <guanw at rhpcs.mcmaster.ca> wrote:
> Hi Dan,
>
> Thank you very much for the reply.
>
> I still use the old way (vtkABC *v= vtkABC::New()) rather than using VTK
> smart pointer. The reference counting mechanism of VTK must have changed
> although I don't know when (which version) that happened.
>
> The reference count of a VTK object used to be 1 right after its creation.
> But now it is not always the case. I find source objects (like
> vtkCubeSource, vtkImageEllipsoidSource, etc) have reference count = 2 right
> after being created while filter object have reference count = 1. I haven't
> checked every class to see if there is an exception to the above finding.
>
> Here is a three-line code section together with running results:
> vtkCubeSource* cube = vtkCubeSource::New(); //
> ReferenceCount of cube = 2
> vtkShrinkPolyData* shrink = vtkShrinkPolyData::New(); // ReferenceCount
> of cube = 2, ReferenceCount of shrink= 1
> shrink->SetInputConnection(cube->GetOutputPort()); // ReferenceCount
> of cube = 2, ReferenceCount of shrink= 2
> It can not be explained by the old VTK reference counting mechanism.
>
> Best,
> Weiguang
>
> On 21/10/2015 3:11 PM, Dan Lipsa wrote:
>
> Hi Weiguang,
> Take a look at
> http://www.vtk.org/Wiki/VTK/Tutorials/SmartPointers
> This might clarify some of your questions. You have to remember that the
> reference count is stored in the objects themselves unlike the c++
> shared_ptr where the reference count is stored in the shared pointer object.
>
> For the first question: do you assign the object to a vtk smart pointer?
> That would explain why the reference count is 2.
> For the rest of the questions: when you set up the pipeline there are other
> objects involved besides the filter themselves, so it is harder to
> understand of the reference count.
>
> Also you can set VTK_DEBUG_LEAKS when you build VTK if you are concerned
> about leaks.
>
> Dan
>
>
> On Thu, Oct 15, 2015 at 4:13 PM, Weiguang guan <guanw at rhpcs.mcmaster.ca>
> wrote:
>>
>> Hello,
>>
>> I find, in debug mode, that the ReferenceCount of a
>> vtkImageEllipsoidSource object becomes 2 right after being initiated
>> (vtkImageEllipsoidSourc::New()). It should be 1 not 2, right? How could this
>> happen?
>>
>> My second question is --- when you make a connection
>> A->SetInputConnection(B->GetOutputPort()); Whose reference count will be
>> increased by 1, A or B? I think B's reference count should be increased
>> because it is used by A. But what I find is just the opposite.
>>
>> My third question is about setting up more than 1 connection for a filter.
>> Taking vtkImageMathematics as an example, I do
>> vtkImageMathematics* A = vtkImageMathematics::New();
>> A->SetInputConnection(0, B1->GetOutputPort();
>> A->SetInputConnection(0, B2->GetOutputPort();
>>
>> I find that the reference count of A gets increased by the first
>> SetInputConnection() call only.
>>
>> Can someone explain how reference counting works in VTK? Thanks.
>>
>> Best,
>> Weiguang
>> _______________________________________________
>> Powered by www.kitware.com
>>
>> Visit other Kitware open-source projects at
>> http://www.kitware.com/opensource/opensource.html
>>
>> Please keep messages on-topic and check the VTK FAQ at:
>> http://www.vtk.org/Wiki/VTK_FAQ
>>
>> Search the list archives at: http://markmail.org/search/?q=vtkusers
>>
>> Follow this link to subscribe/unsubscribe:
>> http://public.kitware.com/mailman/listinfo/vtkusers
>
>
>
>
> _______________________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Please keep messages on-topic and check the VTK FAQ at:
> http://www.vtk.org/Wiki/VTK_FAQ
>
> Search the list archives at: http://markmail.org/search/?q=vtkusers
>
> Follow this link to subscribe/unsubscribe:
> http://public.kitware.com/mailman/listinfo/vtkusers
>
More information about the vtkusers
mailing list