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 1: Line 1:
 
== HOWTO resolve smart pointer circular references in ns-3 memory disposal ==
 
== HOWTO resolve smart pointer circular references in ns-3 memory disposal ==
  
class A : public Object
+
    class A : public Object
{
+
    {
public:
+
    public:
static TypeId GetTypeId (void);
+
        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;
 +
    };
  
void CallbackMethodA();
+
    int main(int argc, char* argv[])
 
+
    {
Callback<void> m_callback;
+
    Ptr\lA\g a = CreateObject<A>();
};
+
 
+
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> b = CreateObject<B>();
 
Ptr<B> b = CreateObject<B>();
 
 

Revision as of 16:43, 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\lA\g 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