-3

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

4

1 回答 1

1

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

vtkSmartPointer<vtkRenderWindow> rw;
rw = vtkRenderWindow<vtkRenderWindow>::New();
rw = vtkRenderWindow<vtkRenderWindow>::New(); // destructor of previous instance is invoked, which deletes the pointer
于 2013-05-10T12:33:01.430 回答