VTK基本概念之VTK智能指针

来源:互联网 发布:网络肥皂是什么意思啊 编辑:程序博客网 时间:2024/05/29 04:46

1、概念

  如果很多对象有相同的值,在程序里没有必要将这个值存储多次。更好的办法是让所有的对象共享这个值。这么做不但节省内存,而且可以是程序运行得更快,因为不需要构造和析构这个值得副本。引用计数就是这样的一个技巧,它允许多个有相同值的对象共享这个值。
  引用计数是个简单的垃圾回收体系,只要其他对象引用某对象(记为对象O),对象O就会增加一个引用计数,当最后引用对象O的对象移除,O对象就会自动析构。

2、实现

  vtk用vtkSmartPointer实现引用计数。智能指针会自动管理引用计数的增加和减少,若检测到某对象的引用计数值减少为0,则会自动释放该对象的资源,从而达到自动管理内存的目的。
  VTK中创建一个对象可以用两种方法:一种是使用vtkObjectBase里静态成员变量New(),用Delete()方法析构。另外一种就是智能指针vtkSmartPointer 。
  vtkSmartPointer是一个模板类,所需的模板参数就是待创建的对象的类名。
  vtkSmartPointer<类名> 实例对象 = vtkSmartPointer<类名>::New()

不能把对象的原始指针赋给智能指针。
正确:

vtkSmartPointer<vtkImageData> image = vtkSmartPointer<vtkImageData>::New()

错误:

vtkSmartPointer<vtkImageData> image = vtkImageData::New()

智能指针类型可以作为函数的返回类型

vtkSmartPointer<vtkImageData> MyFunction(){    vtkSmartPointer<vtkImageData> myObject = vtkSmartPointer<vtkImageData>::New();    return myObject;}

智能指针类型也可以作为类的成员变量,而且会使类在析构时更加容易,不用人为去做任何释放内存的事件。

0 0
原创粉丝点击