在同一个vtkSmartPointer上调用new两次是不安全的吗?

Is calling new twice on the same vtkSmartPointer unsafe?

本文关键字:两次 不安全 vtkSmartPointer 同一个 调用 new      更新时间:2023-10-16

根据这个问题,你不能在没有删除的情况下在同一个普通指针上调用new两次,但是如果你正在使用vtkSmartPointer s呢?我有几个场合,在这样一个智能指针上调用Delete()会产生分割错误,即使在它之后声明了New()。如何完全销毁对象并创建一个新对象?我需要这个来破坏vtkRenderWindow。

vtksmartpointer应该是安全的,因为它们的目的是在它们被销毁时自己清理分配的内存。但是,如果智能指针的任何其他副本仍然存在,当您覆盖"原始"智能指针时,窗口将不会立即被销毁。

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