区别于new,智能指针在不再使用对象时可以自动释放内存,而new需要手动添加释放
某时刻只能有一个unique_ptr指向一个给定的对象。当unique_ptr被销毁时,其所指的对象也被销毁。
注意:
unique_ptr p2(new int(42)); ,默认初始化为nullptr.unique_ptr p2(p1) 或者赋值方式p3=p2//编译器知道函数返回的对象即将被销毁
unique_ptr<int> clone(int p) { //从函数返回一个unique_ptr
return unique_ptr<int>(new int(p));
}
unique_ptr<int> clone(int p) { //返回一个局部对象的拷贝
unique_ptr<int> ret(new int(p));
return ret;
}
u.release() //放弃对指针的控制权,先返回指针再将指针置为空u.reset(q) //如果提供了q,则将u指向q;否则将u置为空unique_ptr p(new objT,fun) //第二个参数是删除器 weak_ptr不控制所指对象的生存周期,指向一个由shared_ptr管理的对象。
创建:
auto p=make_shared<int>(42);
weak_ptr<int> wp(p);
访问:
if(shared_ptr<int> np=wp.lock()){}//用lock()访问可以检查对象是否存在,存在便返回一个指向共享对象的shared_ptr
使用一个weak_ptr,访问vector元素时,不会影响给定的vector的生存周期,且可以组织用户访问一个不再存在的vector.