Bwmat的回答作品:
#include <iostream>
#include <vtkObject.h>
#include <vtkObjectFactory.h>
#include <vtkSmartPointer.h>
class vtkMyClass : public vtkObject {
public:
vtkTypeMacro(vtkMyClass,vtkObject);
void PrintSelf(ostream& os, vtkIndent indent){}
static vtkMyClass * New();
protected:
vtkMyClass();
~vtkMyClass();
};
vtkStandardNewMacro(vtkMyClass)
vtkMyClass::vtkMyClass() {
std::cerr << "constructor called\n";
}
vtkMyClass::~vtkMyClass() {
std::cerr << "destructor called\n";
}
int main(int argc, char ** argv) {
std::cerr << __LINE__ << '\n';
vtkSmartPointer<vtkMyClass> myObject;
std::cerr << __LINE__ << '\n';
myObject = vtkSmartPointer<vtkMyClass>::New();
std::cerr << __LINE__ << '\n';
myObject = NULL; // calls destructor
std::cerr << __LINE__ << '\n';
return 0;
}
輸出:
22
24
constructor called
26
destructor called
28
如何只分配一個NULL指針呢? – Bwmat 2013-05-11 15:41:35
請參閱此鏈接http://www.vtk.org/pipermail/vtkusers/2010-November/113500.html大衛戈比說:「當你重新分配一個智能指針,它的以前的內容自動釋放 。」所以Bwmat是正確的,如果我們分配NULL以前的數據將被刪除 – 2013-07-16 06:34:39
新的正確鏈接:[link](http://vtk.1045678.n5.nabble.com/Recreating-a-smart-pointer-object-after-deletion- td3277130.html#a3277183) – Flot2011 2017-10-22 21:46:04