diff options
| -rwxr-xr-x | indra/llcorehttp/_refcounted.h | 19 | 
1 files changed, 19 insertions, 0 deletions
| 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 <boost/thread.hpp> +#include <boost/intrusive_ptr.hpp>  #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<RefCounted*>(rawptr, false). + * IntrusivePtr<T> encapsulates that for you. + */ +template <typename T> +struct IntrusivePtr: public boost::intrusive_ptr<T> +{ +	IntrusivePtr(): +		boost::intrusive_ptr<T>() +	{} +	IntrusivePtr(T* p): +		boost::intrusive_ptr<T>(p, false) +	{} +}; +  inline void intrusive_ptr_add_ref(RefCounted* p)  {  	p->addRef(); | 
