C++ 如何释放vtksmart指针

C++ 如何释放vtksmart指针,c++,smart-pointers,vtk,C++,Smart Pointers,Vtk,是否可以在调用vtkSmartPointer的析构函数(对象生命周期结束的范围结束)之前释放vtkSmartPointer 我有一个类可以画出某种类型的情节。还有一个close()函数,用于关闭当前打开的窗口。但是如果用户调用它,我想释放所有剩余的VTKSmartPointer,那么类必须释放一些内存。假设他画了一些东西,做了很多计算,然后喜欢用同一个物体再画一次。在这些计算过程中,我想释放所有未使用的内存 鉴于此,没有类似于std::unique\u ptr::release的功能,但有什么解

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

我有一个类可以画出某种类型的情节。还有一个close()函数,用于关闭当前打开的窗口。但是如果用户调用它,我想释放所有剩余的VTKSmartPointer,那么类必须释放一些内存。假设他画了一些东西,做了很多计算,然后喜欢用同一个物体再画一次。在这些计算过程中,我想释放所有未使用的内存

鉴于此,没有类似于
std::unique\u 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;
}
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;
}

给它分配一个空指针怎么样?请参考David Gobbi所说的链接“当你重新分配一个智能指针时,它以前的内容会自动释放”。因此,如果我们分配空指针,Bwmat是正确的。以前的数据将被删除。新的正确链接:给它分配一个空指针怎么样?请参考David Gobbi所说的链接“当您重新分配智能指针时,它以前的内容将自动释放。”因此,如果我们分配NULL,Bwmat是正确的。以前的数据将被删除新建正确的链接: