1. Class shared_ptr实现共享式拥有概念,多个智能指针可以指向相同的对象,该对象和其相关资源会在“最后一个引用被销毁”时被释放。标准库还提供了weak_ptr、bad_weak_ptr和enable_shared_from_this等辅助类。
shared_ptr在真正释放资源的时候会调用在创建它是指定的deleter,如果没有指定,会调用默认的,而且它本身不会像unique_ptr一样的,可以接受数组类型模板参数,这就导致了shared_ptr想要管理数组的时候,需要额外指定,代码如下所示:
点击(此处)折叠或打开
- shared_ptr<int> p(new int[10]);// 编译ok,但是释放时有问题
- shared_ptr<int> p(new int[10],[](int* p){delete[] p;});
- shared_ptr<int> q(new int[10],std::default_delete<int []>());
- unique_ptr<int []> r(new int[10]);
- shared_ptr<int []> s(new int[10]); // 编译会报错
Class wea_ptr:
为避免shared_ptr循环引用等问题,这里引入了weak_ptr, 它的值来自于shared_ptr但是不增加其引用计数,不支持解引用操作,可以通过lock来升级出一个新的shared_ptr
2. Class unique_ptr实现独占式拥有或严格拥有概念,保证同一时间内只有一个智能指针可以指向该对象。可以移交使用权。它对于避免资源泄露特别有用
所有智能指针类都定义在头文件内