HOWTO resolve circular references in ns-3 memory disposal: Difference between revisions
Jump to navigation
Jump to search
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 == | ||
< | <code> | ||
class A : public Object | class A : public Object | ||
{ | { | ||
Line 15: | Line 15: | ||
Callback<void> m_callback; | Callback<void> m_callback; | ||
}; | }; | ||
</ | </code> | ||
<code> | |||
int main(int argc, char* argv[]) | int main(int argc, char* argv[]) | ||
{ | { | ||
Line 23: | Line 24: | ||
b->m_callback = MakeCallback (&A::CallbackMethodA, a); | b->m_callback = MakeCallback (&A::CallbackMethodA, a); | ||
} | } | ||
</code> | |||
or | or | ||
<code> | |||
int main(int argc, char* argv[]) | int main(int argc, char* argv[]) | ||
{ | { | ||
Line 33: | Line 34: | ||
b->AggregateObject(a); | b->AggregateObject(a); | ||
} | } | ||
</code> | |||
<code> | |||
==15749== LEAK SUMMARY: | ==15749== LEAK SUMMARY: | ||
==15749== definitely lost: 40 bytes in 1 blocks | ==15749== definitely lost: 40 bytes in 1 blocks | ||
Line 40: | Line 42: | ||
==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 | ||
</code> |
Revision as of 16:51, 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();
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 = CreateObject();
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