C++ 智能指针

来源:互联网 发布:virtualbox安卓软件 编辑:程序博客网 时间:2024/05/21 09:10



由于C++ 中没有自动内存回收机制,每当程序员在堆上new 一块内存时都要通过delete释放掉。如果程序员忘记释放,可能会异常导致内存泄露,程序过早退出。

如果在程序中应用智能指针,可以有效缓解这类问题。
智能指针的类型主要有
boost::
smart_ptr
scoped_ptr
scoped_array
shared_ptr
shared_array

智能指针的原理与实现:
当类中有指针成员时,一般有两种方式管理指针成员。
1.采用值型的方式管理,每个类对象都保留一份指针指向的对象的拷贝。
2.优雅的方式是使用智能指针,从而实现指针指向对象的共享。

智能指针的通用实现技术是使用引用计数,智能指针类将一个计数器和类指向的对象项关联, 引用计数跟踪该类有多少个对象共用一个指针。

当一个对象作为另外对象的副本是,拷贝构造函数 拷贝指针并增加相应的引用计数,调用析构函数可以减少引用计数。引用计数的初始值为1,当减少为0,说明该对象被删除。

访问智能指针包含的裸指针则可以用 get() 函数。由于智能指针是一个对象,所以if (my_smart_object)永远为真,要判断智能指针的裸指针是否为空,需要这样判断:if (my_smart_object.get())。

智能指针包含了 reset() 方法,如果不传递参数(或者传递 NULL),则智能指针会释放当前管理的内存。如果传递一个对象,则智能指针会释放当前对象,来管理新传入的对象。

0 0