智能指针:
unique_ptr:独占指针,同一内存空间区域不能被两个指针引用。
shared_ptr:共享指针,强引用,利用计数器,等到计数器为 0 时就释放。
weak_ptr:共享指针,弱引用,用于解决 shared_ptr 互相引用导致无法释放的情况。
#include <iostream>
#include <memory>
using namespace std;
class B;
class A {
public:
std::weak_ptr<B> bptr; // 修改为weak_ptr 不会增加引用计数
~A() {
cout << "A is deleted" << endl;
}
};
class B {
public:
std::shared_ptr<A> aptr;
~B() {
cout << "B is deleted" << endl;
}
};
void weak_f(){
std::shared_ptr<A> ap(new A); // ap 指针指向 newA
std::shared_ptr<B> bp(new B); // bp 指针指向 newB
ap->bptr = bp; // ap 的 bptr 属性指向 bp
bp->aptr = ap; // bp 的 aptr 属性指向 ap
// 指向 newA 的指针数量 = 2(ap + aptr)
// 指向 newB 的指针数量 = 1(bp) bptr 不计算
cout<<ap.use_count()<<endl;
cout<<bp.use_count()<<endl;
// 指向 newB 的指针数量 - 1 = 0 释放 bp 指向 newA 的指针数量 -1 = 1
// 指向 newA 的指针数量 - 1 = 0 释放 ap
}
int main()
{
weak_f();
cout<< "main leave" << endl;
return 0;
}