上一篇介绍了四种智能指针,四种智能指针的特点及使用方法
看段代码:
class B;
class A
{
public:
A(){ cout << "A()" << endl; }
A(int i):a(i){ cout << "A(int)" << endl;}
~A(){ cout << "~A()" << endl;}
shared_ptr<B> _bptr;
int a;
};
class B
{
public:
B(){ cout << "A()" << endl; }
B(int i):b(i){ cout << "A(int)" << endl;}
~B(){cout << "~B()" << endl;}
shared_ptr<A> _aptr;
int b;
};
int main()
{
shared_ptr<A> aptr(new A(10));
shared_ptr<B> bptr(new B(10));
cout << aptr.use_count() << endl;
aptr -> _bptr = bptr;
bptr -> _aptr = aptr;
cout << aptr.use_count() << endl;
return 0;
}
导致程序结束也没有调用类的析构函数,在堆上申请的资源没有得到正确的释放,shared_ptr不恰当的使用带来的循环用问题