Можно ли освободить 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
Других решений пока нет …