是否可以在调用析构函数之前释放vtkSmartPointer(对象生存期结束的范围结束)?
我有一个类绘制某种类型的情节。还有一个close()函数,它将关闭当前打开的窗口。但是,如果用户调用它,我想释放所有剩余的vtkSmartPointers,该类必须释放一些内存。假设他绘制了一些东西,进行了大量的计算,然后又喜欢用同一个对象再次绘制它。在这些计算过程中,我想释放所有未使用的内存。
根据the documentation,有std::unique_ptr::release
这样的功能,但有没有解决方法?
答案 0 :(得分:3)
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