gpt4 book ai didi

c++ - 如何释放 vtkSmartPointer

转载 作者:行者123 更新时间:2023-11-30 01:59:14 25 4
gpt4 key购买 nike

是否可以在调用析构函数之前释放 vtkSmartPointer(对象生命周期结束范围结束)?

我有一个类绘制某种类型的图。还有一个 close() 函数,它将关闭当前打开的窗口。但是,如果用户调用它,我想释放所有剩余的 vtkSmartPointers,该类必须释放一些内存。假设他画了一些东西,做了很多计算,然后喜欢用同一个对象再画一遍。在这些计算过程中,我想释放所有未使用的内存。

根据the documentation没有像 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

关于c++ - 如何释放 vtkSmartPointer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16497930/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com