如何避免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;
}
没有输出。 没有调用析构函数。内存泄漏。 我一直相信智能指针有助于避免内存泄漏。
如果我需要在类中进行交叉引用该怎么办?
Consider the following code.
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;
}
There is no output. No desctructor is called. Memory leak.
I have always believed that the smart pointer helps avoid memory leaks.
What should I do if I need cross-references in the classes?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果您有这样的循环引用,则一个对象应包含
weak_ptr
到另一个,而不是shared_ptr
。来自
shared_ptr
简介 :谢谢格伦提供的链接。
If you have circular references like this, one object should hold a
weak_ptr
to the other, not ashared_ptr
.From the
shared_ptr
introduction:Thanks, Glen, for the link.