如何释放vtkSmartPointer

时间:2013-05-11 14:08:29

标签: c++ smart-pointers vtk

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

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

根据the documentation,有std::unique_ptr::release这样的功能,但有没有解决方法?

1 个答案:

答案 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