智能指针
重点:四种智能指针及底层实现:auto_ptr、unique_ptr、shared_ptr、weak_ptr
std名称空间定义了3种智能指针。
unique_ptr<T>
具有唯一性,不会有多个该指针指向同一地址,该指针不可复制。
创建
必须是直接初始化
可以用传统的new
unique_ptr<double> pdata{new double{999.0}};
也可以用 make_unique<T>() 方法
unique_ptr<double> pdata {make_unique<double>(999.0)};
auto pdata {make_unique<double>(999.0)};
修改和访问
*pdata = 8888;
cout << *pdata << endl;
取地址 get()
pdata.get();
重置 reset()
不带参数重置为nullptr,带参数重置为指向参数这个对象的指针,
如果参数是unique_ptr,需要使用 release() 放弃其控制权。
unique_ptr <string> p3 {new string ("Hi, Trex")}; p2.reset(p3.release());
把所有权转换给另一个智能指针 release()
unique_ptr<string> p2(p1.release()) //p1放弃对于指针的控制权
shared_ptr<T>
多个指针指向同一地址,会增加引用计数。引用计数为0则自动释放。
创建
除了用make_unique<T>()
还可以用另外一个share_ptr()来创建。
share_ptr<double> pdata2 {pdata};
weak_ptr<T>
不控制所指对象生命期的智能指针
指向 shared_ptr<T> 时不增加引用计数,不能防止它指向的对象被释放。但也可以阻止在被释放后访问悬挂指针的情况
创建
shared_ptr <int> p1{make_unique<int>(250)}; weak_ptr <int> p2 (p1);
赋值
可以把shared_ptr或 weak_ptr 用 = 赋值给另一个weak_ptr
posted on 2022-06-05 11:27 MIXTAPE_208 阅读(25) 评论(0) 编辑 收藏 举报