Difference between revisions of "HOWTO resolve circular references in ns-3 memory disposal"

From Nsnam
Jump to: navigation, search
(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\lA\g a = CreateObject<A>();
+
        Ptr<A> a = CreateObject<A>();
Ptr<B> b = CreateObject<B>();
+
        Ptr<B> b = CreateObject<B>();
+
        a->m_callback = MakeCallback (&B::CallbackMethodB, b);
a->m_callback = MakeCallback (&B::CallbackMethodB, b);
+
        b->m_callback = MakeCallback (&A::CallbackMethodA, a);
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<A> a = CreateObject<A>();
Ptr<B> b = CreateObject<B>();
+
        Ptr<B> b = CreateObject<B>();
+
        a->m_callback = MakeCallback (&B::CallbackMethodB, b);
a->m_callback = MakeCallback (&B::CallbackMethodB, b);
+
        b->AggregateObject(a);
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==     possibly lost: 0 bytes in 0 blocks
+
    ==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==         suppressed: 0 bytes in 0 blocks
+
    ==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