19
请考虑以下代码。如何通过shared_ptr避免内存泄漏?
using boost::shared_ptr;
struct B;
struct A{
~A() { std::cout << "~A" << std::endl; }
shared_ptr<B> b;
};
struct B {
~B() { std::cout << "~B" << std::endl; }
shared_ptr<A> a;
};
int main() {
shared_ptr<A> a (new A);
shared_ptr<B> b (new B);
a->b = b;
b->a = a;
return 0;
}
有没有输出。 没有引号。内存泄漏。我始终认为,智能指针有助于避免内存泄漏。
如果我需要类中的交叉引用,该怎么办?
@Alexey,这里有一个链接指向文档,它在介绍中明确提出了这个问题。 http://www.boost.org/doc/libs/1_41_0/libs/smart_ptr/shared_ptr.htm – Glen 2009-12-01 15:32:01
哪一个?为什么不用弱引用替换它们呢?这是荒唐的。 'shared_ptr'被使用是有原因的。 – curiousguy 2011-10-09 02:10:50
@curiousguy:我不确定我是否理解你的问题:你认为什么是荒谬的?要打破一个循环,你必须用一个弱引用来替换_one_强引用;哪一个完全取决于用例。你不能用弱引用替换所有的强引用,因为这样所有的对象都将被销毁,因为没有所有者离开。 – 2011-10-09 04:54:29