Difference between revisions of "HOWTO resolve circular references in ns-3 memory disposal"
From Nsnam
(→HOWTO resolve smart pointer circular references in ns-3 memory disposal) |
(→HOWTO resolve smart pointer circular references in ns-3 memory disposal) |
||
Line 18: | Line 18: | ||
int main(int argc, char* argv[]) | int main(int argc, char* argv[]) | ||
{ | { | ||
− | + | Ptr<A> a = CreateObject<A>(); | |
− | + | Ptr<B> b = CreateObject<B>(); | |
− | + | a->m_callback = MakeCallback (&B::CallbackMethodB, b); | |
− | + | b->m_callback = MakeCallback (&A::CallbackMethodA, a); | |
− | + | } | |
− | } | + | |
or | or | ||
− | int main(int argc, char* argv[]) | + | int main(int argc, char* argv[]) |
− | { | + | { |
− | + | Ptr<A> a = CreateObject<A>(); | |
− | + | Ptr<B> b = CreateObject<B>(); | |
− | + | a->m_callback = MakeCallback (&B::CallbackMethodB, b); | |
− | + | b->AggregateObject(a); | |
− | + | } | |
− | } | + | |
− | ==15749== LEAK SUMMARY: | + | ==15749== LEAK SUMMARY: |
− | ==15749== definitely lost: 40 bytes in 1 blocks | + | ==15749== definitely lost: 40 bytes in 1 blocks |
− | ==15749== indirectly lost: 152 bytes in 5 blocks | + | ==15749== indirectly lost: 152 bytes in 5 blocks |
− | ==15749== | + | ==15749== possibly lost: 0 bytes in 0 blocks |
− | ==15749== still reachable: 10,360 bytes in 5 blocks | + | ==15749== still reachable: 10,360 bytes in 5 blocks |
− | ==15749== | + | ==15749== suppressed: 0 bytes in 0 blocks |
Revision as of 16:45, 30 August 2013
HOWTO resolve smart pointer circular references in ns-3 memory disposal
class A : public Object { public: static TypeId GetTypeId (void); void CallbackMethodA(); Callback<void> m_callback; }; class B : public Object { public: static TypeId GetTypeId (void); void CallbackMethodB(); Callback<void> m_callback; };
int main(int argc, char* argv[]) { Ptr<A> a = CreateObject<A>(); Ptr b = CreateObject<B>(); a->m_callback = MakeCallback (&B::CallbackMethodB, b); b->m_callback = MakeCallback (&A::CallbackMethodA, a); }
or
int main(int argc, char* argv[]) { Ptr<A> a = CreateObject<A>(); Ptr<B> b = CreateObject<B>(); a->m_callback = MakeCallback (&B::CallbackMethodB, b); b->AggregateObject(a); }
==15749== LEAK SUMMARY: ==15749== definitely lost: 40 bytes in 1 blocks ==15749== indirectly lost: 152 bytes in 5 blocks ==15749== possibly lost: 0 bytes in 0 blocks ==15749== still reachable: 10,360 bytes in 5 blocks ==15749== suppressed: 0 bytes in 0 blocks