VTKImageData 手动释放内存资源

发布时间 2023-03-30 18:50:34作者: 丢了木剑的温华
一.VtkSmartPointer

  使用智能指针创建对象,则无需手动调用Delete()方法减少引用计数,因为引用计数的增加与减少都是由智能指针自动完成的。VTK实现了便利的自动内存管理的概念,使用引用计数。与其他智能指针不同之处在于引用计数保留在VTK对象本身中,而不是智能指针类中。这样的好处在于:即使VTK对象作为原始指针传递,也可以增加引用计数。因此使用智能指针时,我们不需要考虑内存管理的问题。

二.手动释放内存

   但在一些情况下,我们需要手动释放内存,例如在进行数据切换时,我们可能想要释放掉上一个数据占据的内存,特别是在数据比较大的时候。

    这也可以不通过智能指针,而是通过new和delete方法进行内存管理。如下:

    vtkNrrdReader* reader = vtkNrrdReader::New();
    reader->SetFileName(dirPath.c_str());
    reader->Update();

    vtkImageData* m_imageData =  vtkImageData::New();
    m_imageData->DeepCopy(reader->GetOutput());//深拷贝
    reader->Delete();//释放vtkNrrdReader中的内存
    m_imageData->UnRegister(m_imageData);//释放图像内存