概述
C++11中的新引进的智能指针做到了手动申请资源,由系统释放资源的垃圾回收机制,为了能跟上时代的潮流,新的C++标准一定是要不断学习的,这次我们再强化一下unique_ptr,share_ptr和weak_ptr的使用。
unique_ptr
unique_ptr是auto_ptr的升级版,有了移动语义,也就是std::move();取消了对于拷贝语义的支持,在auto_ptr中,存在拷贝语义导致原对象直接失效,成为空指针,这样在后续的遍历过程出错。
上次提到unique_ptr把拷贝语义和移动语义记反了,面试官提醒我是否知道移动语义,后来才说到unique_ptr有移动语义但是没能明确说unique没有拷贝语义,这个是一个很大的扣分点,正是因为auto有拷贝没有移动,所以会有资源被提前释放的问题,unique取消了拷贝添加了移动这才是unique比起auto安全的地方。
以下是例子:
unique_ptr<string> upt(new string("Hello"));
unique_ptr<string> upt1(upt); //编译出错,已禁止拷贝
unique_ptr<string> upt1=upt; //编译出错,已禁止拷贝
unique_ptr<string> upt1=std::move(upt); //控制权限转移
auto_ptr<string> apt(new string("Hello"));
auto_ptr<string> apt1(apt); //编译通过
auto_ptr<string> apt1=apt; //编