这句话的意思就是,智能指针虽好,但是也有概率出问题,毕竟C++没有java那种垃圾回收机制,所以。
其中一种情况即使shared_ptr的循环引用,这里有个exp:
http://blog.csdn.net/qq_26768741/article/details/52430368
类里的shared_ptr互相指向,导致无法释放内存。
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<cstdlib>
#include<boost/shared_ptr.hpp>
using namespace std;
struct Node
{
~Node()
{
cout << "析构函数" << endl;
}
int data;
boost::shared_ptr<Node> next;
boost::shared_ptr<Node> prev;
};
void test1()
{
boost::shared_ptr<Node > sp1(new Node);
boost::shared_ptr<Node > sp2(new Node);
sp1->next = sp2;
sp2->prev = sp1;
}
int main()
{
test1();
system("pause");
return 0;
}
在这里的sp1和sp2的计数都是1,在这里当你进行析构的时候,析构一块空间,会去考虑先释放另外一块空间,然后释放另外一块空间,又要依赖于释放现在的这块空间,这样就会出现一个无限的循环,所以最终的结果是,谁都没有进行释放空间,这样就存在了内存泄漏的问题。
解决办法是weak_ptr;但是我觉得还是怪怪的。