diff --git a/indra/llcorehttp/_refcounted.h b/indra/llcorehttp/_refcounted.h index cd16e2e2b4..7f713f2298 100755 --- a/indra/llcorehttp/_refcounted.h +++ b/indra/llcorehttp/_refcounted.h @@ -32,6 +32,7 @@ #include "fix_macros.h" #include +#include #include "llapr.h" @@ -120,6 +121,24 @@ inline void RefCounted::destroySelf() delete this; } +/** + * boost::intrusive_ptr may be used to manage RefCounted classes. + * Unfortunately RefCounted and boost::intrusive_ptr use different conventions + * for the initial refcount value. To avoid leaky (immortal) objects, you + * should really construct boost::intrusive_ptr(rawptr, false). + * IntrusivePtr encapsulates that for you. + */ +template +struct IntrusivePtr: public boost::intrusive_ptr +{ + IntrusivePtr(): + boost::intrusive_ptr() + {} + IntrusivePtr(T* p): + boost::intrusive_ptr(p, false) + {} +}; + inline void intrusive_ptr_add_ref(RefCounted* p) { p->addRef();