目录
1. 几种智能指针
1. auto_ptr: c++11中推荐不使用他(放弃)
2. shared_ptr: 每添加一次引用 就+1,减少一次引用,就-1;做到指针进行共享
3. unique_ptr: 一个指针同时只能有一个使用者使用
4. weaked_ptr: 与shared_ptr搭配使用
1.1 weak_ptr
参考:https://zh.cppreference.com/w/cpp/memory/weak_ptr
-
std::weak_ptr
是一种智能指针,它对被 std::shared_ptr 管理的对象存在 非拥有性(“弱”)引用。在访问所引用的对象前必须 先转换为 std::shared_ptr。 -
std::weak_ptr
用来 表达临时所有权的概念:-
当某个对象只有存在时才需要被访问,而且随时可能被他人删除时,可以使用
std::weak_ptr
来跟踪该对象。 -
需要获得临时所有权时,则将其转换为 std::shared_ptr,此时如果原来的 std::shared_ptr被销毁,则该对象的生命期将被延长至这个临时的 std::shared_ptr 同样被销毁为止。
-
-
std::weak_ptr 的另一用法是:打断 std::shared_ptr 所管理的对象组成的环状引用。(打破shared_ptr的循环引用)
-
若这种环被孤立(例如无指向环中的外部共享指针),则
shared_ptr
引用计数无法抵达零,而内存被泄露。 -
能令环中的指针之一为弱指针以避免此情况。
-
循环引用的问题:该被调用的析构函数没有被调用
#include <iostream>
#include <memory>
using namespace std;
class Parent;
typedef std::shared_ptr<Parent> ParentPtr;
class Child
{
public:
ParentPtr father;
Child() {
cout << "hello Child" &