是否可以在调用其析构函数之前释放一个 vtkSmartPointer(对象生命周期结束的范围结束)?
我有一堂课可以画出某种类型的情节。还有一个 close() 函数,它将关闭当前打开的窗口。但是如果用户调用它,我想释放所有剩余的 vtkSmartPointers 该类必须释放一些内存。假设他画了一些东西,做了很多计算,然后喜欢用同一个物体再画一次。在这些计算期间,我想释放所有未使用的内存。
根据文档,没有类似的功能std::unique_ptr::release,但是有什么解决方法吗?
是否可以在调用其析构函数之前释放一个 vtkSmartPointer(对象生命周期结束的范围结束)?
我有一堂课可以画出某种类型的情节。还有一个 close() 函数,它将关闭当前打开的窗口。但是如果用户调用它,我想释放所有剩余的 vtkSmartPointers 该类必须释放一些内存。假设他画了一些东西,做了很多计算,然后喜欢用同一个物体再画一次。在这些计算期间,我想释放所有未使用的内存。
根据文档,没有类似的功能std::unique_ptr::release,但是有什么解决方法吗?
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