杰表技术论坛 's Archiver

admin 发表于 2018-7-2 15:14

std::unique_ptr

1. unique_ptr来管理指针,一个原则:一个unique_ptr管理一个指针,一个指针只能被一个unique_ptr管,前者好理解,后者容易被忽视:
int * pi = new int;
std::unique_ptr<int> p1(pi);
std::unique_ptr<int> p2(pi); // 将运行时错误,将两个指针,交给两个 unique_ptr 来管理

admin 发表于 2018-7-2 15:30

2. 为了这个原则,uniuqe_ptr,把复制构造函数,和复制赋值方法都删除了,
unique_ptr(const _Myt&) = delete;   // 复制构造函数
_Myt& operator=(const _Myt&) = delete;  // 复制赋值方法

3.  
std::unique_ptr<int> p3(p1);// 出错,复制初始化方法,被删,
p1 = p2; //  不能使用,复制赋值方法被删
p1 = std::unique_ptr<int>(pi); // 可以使用,调用移动赋值方法 unique_ptr<int> & operator=(unique_ptr<int>&& _Right)

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.