根据this问题,如果没有删除,你不能在相同的普通指针上调用new两次,但是如果你正在处理vtkSmartPointer
s怎么办?我有几个位置,在这样的智能指针上调用Delete()给出了分段错误,即使在它之后声明了New()。
我怎样才能完全破坏对象并创建一个新对象?我需要这个来破坏vtkRenderWindow。提前谢谢。
答案 0 :(得分:1)
vtkSmartPointers应该可以安全覆盖,因为它们的目的是在破坏时自行清理已分配的内存。但是,如果智能指针的任何其他副本仍然存在,则当您覆盖“原始”智能指针时,窗口不会立即被销毁。
vtkSmartPointer<vtkRenderWindow> rw;
rw = vtkRenderWindow<vtkRenderWindow>::New();
rw = vtkRenderWindow<vtkRenderWindow>::New(); // destructor of previous instance is invoked, which deletes the pointer