В соответствии с этот вопрос, вы не можете вызвать новый дважды на тот же обычный указатель без удаления, но что, если вы работаете с vtkSmartPointer
s? У меня было несколько случаев, когда вызов Delete () для такого умного указателя давал ошибку сегментации, даже если после нее было объявлено New ().
Как я могу полностью уничтожить объект и создать новый? Мне нужно это, чтобы уничтожить окно vtkRenderWindow. Заранее спасибо.
vtkSmartPointers должны быть безопасны для перезаписи, так как их целью является очистка выделенной памяти самостоятельно, когда они уничтожены. Однако, если какая-либо другая копия смарт-указателя останется, окно не будет немедленно уничтожено при перезаписи «оригинального» смарт-указателя.
vtkSmartPointer<vtkRenderWindow> rw;
rw = vtkRenderWindow<vtkRenderWindow>::New();
rw = vtkRenderWindow<vtkRenderWindow>::New(); // destructor of previous instance is invoked, which deletes the pointer
Других решений пока нет …