C++:共享指针unique_ptr的理解与应用
指正指针unique_ptr
智能指针是C++11引入的新特性。对智能指针来说就有两条原则:
- 智能指针本身不能被动态分配,否则只能指针自身有无法被释放的风险,它所管理对象不能正确地被释放;
- 在栈上分配智能指针,让它指向堆上动态分配的对象,这样就能保证智能指针所管理的对象能够合理地被释放。
智能指针unique_ptr 具备“在适当时机自动释放堆内存空间”的能力。和指针shared_ptr最大的不同之处在于,指针unique_ptr指向的堆内存无法同其它指针unique_ptr共享,每个unique_ptr指针都独自拥有对其所指堆内存空间的所有权。这也说明每个指针unique_ptr指向的堆内存空间的引用计数,都只能为1,一旦该unique_ptr指针放弃对所指堆内存空间的所有权,则该空间会被立即释放回收。
智能指针unique_ptr是以模板类的形式提供的,unique_ptr<T>(T 为指针所指数据的类型)定义在<memory>
头文件,并位于 std 命名空间中。
#include <memory>using namespace std;
创建智能指针unique_ptr
unique_ptr<T> 模板类提供了多个实用的构造函数。通过以下2种方式,