在你AddObserver的时候,创建了一个动态callback对象,这个对象的生命期的管理者就是执行AddObserver的那个对象
理由如下(vtkObject.cxx源码):
void vtkSubjectHelper::RemoveAllObservers()
{
vtkObserver *elem = this->Start;
vtkObserver *next;
while (elem)
{
next = elem->Next;
delete elem;
elem = next;
}
this->Start = nullptr;
}
从这个函数的逻辑来看,这个函数是可以被反复调用的。
而RemoveObservers是任何一个VTK对象在析构的时候都会去做的事情,理由如下:
vtkAbstractWidget::~vtkAbstractWidget()
{
if ( this->WidgetRep )
{
// Remove the representation from the renderer.
if (this->CurrentRenderer)
{
this->CurrentRenderer->RemoveViewProp(t