智能指针

C++的指针分为4种auto_ptr,unique_ptr,shared_ptr,weak_ptr

auto_ptr已经废止不用了,主要应用的就是unique_ptr和shared_ptr,这两种主要的区别是shared_ptr指向的对象可以由多个智能指针指向,而unique_ptr的指针只能由一个unique_ptr指针指向

shared_ptr

//make_shared<A>(T1, T2) T1 T2是A构造函数需要的参数
shared_ptr<string> a = make_shared<string>(string("hello"));
shared_ptr<string> b(new string("b"));
shared_ptr<string> c(a);
//一般用于类成员变量为智能指针时的初始化
shared_ptr<string> a;
a.reset(new string("Hello"));
*p //获得引用对象
p.get() //返回指向对象的普通指针

unique_ptr

//make_unique<A>(T1, T2) T1 T2是A构造函数需要的参数
unique_ptr<string> a(new string("a"));
unique_ptr<string> b(a); //注意这是错误的,因为是unique_ptr
unique_ptr<string> c = a; //注意这也是错误的

a = nullptr; //释放a指向的对象
a.release(); //a放弃指向对象的所有权,返回该智能指针,一般用于对象所有权转移
a.reset(); //释放a所指向的对象

unique_ptr<string> b(a.release()); //实现unique_ptr对象所有权从b到a的转移
a.reset(b.release()); //a释放自己指向的对象 b将所有权转移给a;

results matching ""

    No results matching ""