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?
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.