This isssue is well discussed in the shared_ptr docs. And it is also suggested there to use weak_ptr, instead of shared_ptr. shared_ptr can not resolve cyclic dependencies:
Please read:
http://www.boost.org/libs/smart_ptr/shared_ptr.htm
...
"Because the implementation uses reference counting, cycles of shared_ptr instances
will not be reclaimed. For example, if main() holds a shared_ptr to
A, which directly or indirectly holds a shared_ptr back to A,
A's use count will be 2. Destruction of the original shared_ptr will
leave A dangling with a use count of 1. Use weak_ptr
to "break cycles.""
...
With Kind Regards,
Ovanes Markarian
hi, guys, I found memory leak using the following code:
#include <boost\array.hpp>
#include <boost\shared_ptr.hpp>
using namespace boost;
class C
{
public:
shared_ptr<C> pNext;
};
void test()
{
shared_ptr<C> c0(new C());
shared_ptr<C> c1(new C());
c0 -> pNext = c1;
c1 -> pNext = c0;
}
void main()
{
test();
_CrtDumpMemoryLeaks();
}
when running with F5, it said:
Detected memory leaks!
Dumping objects ->
d:\program files\microsoft visual studio 8\vc\include\crtdbg.h(1147) : {126} normal block at 0x003A64B0, 16 bytes long.
Data: < E hd: > C4 17 45 00 01 00 00 00 01 00 00 00 68 64 3A 00
d:\program files\microsoft visual studio 8\vc\include\crtdbg.h(1147) : {125} normal block at 0x003A6468, 8 bytes long.
Data: < c: d: > D0 63 3A 00 18 64 3A 00
d:\program files\microsoft visual studio 8\vc\include\crtdbg.h(1147) : {124} normal block at 0x003A6418, 16 bytes long.
Data: < E c: > C4 17 45 00 01 00 00 00 01 00 00 00 D0 63 3A 00
d:\program files\microsoft visual studio 8\vc\include\crtdbg.h(1147) : {123} normal block at 0x003A63D0, 8 bytes long.
Data: <hd: d: > 68 64 3A 00 B0 64 3A 00
Object dump complete.
Any body have an idea about this? Thanks very much.
_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users