在同一个vtkSmartPointer不安全的情况下调用new两次?

时间:2013-05-10 11:33:46

标签: c++ vtk

根据this问题,如果没有删除,你不能在相同的普通指针上调用new两次,但是如果你正在处理vtkSmartPointer s怎么办?我有几个位置,在这样的智能指针上调用Delete()给出了分段错误,即使在它之后声明了New()。 我怎样才能完全破坏对象并创建一个新对象?我需要这个来破坏vtkRenderWindow。提前谢谢。

1 个答案:

答案 0 :(得分:1)

vtkSmartPointers应该可以安全覆盖,因为它们的目的是在破坏时自行清理已分配的内存。但是,如果智能指针的任何其他副本仍然存在,则当您覆盖“原始”智能指针时,窗口不会立即被销毁。

vtkSmartPointer<vtkRenderWindow> rw;
rw = vtkRenderWindow<vtkRenderWindow>::New();
rw = vtkRenderWindow<vtkRenderWindow>::New(); // destructor of previous instance is invoked, which deletes the pointer