VTK修炼之道80:VTK开发基础_智能指针与引用计数

本文介绍了VTK中的引用计数和智能指针管理内存的方法,详细阐述了vtkObjectBase的引用计数机制,Register()与Unregister()函数的使用,以及Delete()函数在对象删除中的作用。同时,讨论了智能指针vtkSmartPointer如何避免内存泄漏,以及其在生命周期结束时自动释放内存的特性。此外,还提到了vtkObjectBase的重要函数,如GetClassName()、IsTypeOf/IsA()和Print系列函数。
摘要由CSDN通过智能技术生成

1.引用计数

VTK经过多年的开发与维护,已经形成了一套稳定的框架和开发规则。因此,了解这些规则和框架是定制VTK类的基础,这其中用到了大量面向对象的设计模式,例如对象工程模式、观察者/命令模式;还有就是当下非常流行的引用计数与智能指针等高级内存管理等。
内存管理在大型的工程中是非常重要的内容,如果不能有效地管理内存,将严重影响到应用程序的执行效率,甚至可能造成程序崩溃。之前学习C++基础时,教材中都会反复的强调,使用new操作符申请的空间,一定要使用delete来释放。C++中并没有提供高级的内存管理与垃圾回收机制,通常进行手动管理。这对于简单的程序而言可以轻松完成,但是对于大型程序就会疲于应付。最有代表性例子就是,当一个内存块(可以看做一个指针)被多个对象引用时,删除任意一个对象,都可能影响其他对象,引用计数和智能指针刚好用来解决这个问题。

1.1 引用计数

简单来说,引用计数就是每个对象中维护一个引用计数的变量,表示当前对象被多少对象引用。

当一个对象被另一个对象引用时,该对象的引用计数就会加1;当一个对象取消对该对象的引用时,该对象的引用计数减1.当引用计数为0时,程序就会撤销该对象。

VTK中实现引用计数的类为vtkObjectBase。VTK是一个C++类库,在VTK中,C++的继承与多态得到了完美的体现。经过十几年的发展,所有的VTK类集合可以看做一个树状结构,vtkObjectBase则是他们共同的祖先。

这也说明了绝大部分VTK类都支持引用计数。vtkObjectBase中定义了一个ReferenceCount变量,改变量记录了引用计数。当一个vtkObjectBase及其子类对象创建时,ReferenceCount就会被初始化为1。

vtkObjectBase::vtkObjectBase
{
      this->ReferenceCount = 1;
}
在该类中,vtkObjectBase的构造函数、析构函数、拷贝构造函数以及“=”操作符都被声明为“protected”类型,因此不能显示地构造和销毁vtkObjectBase及其子类对象。vtkObjectBase定义了一个静态函数New(),用于生成vtkObjectBa
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值