forked from boostorg/exception
80 lines
1.6 KiB
C++
80 lines
1.6 KiB
C++
//Copyright (c) 2006-2008 Emil Dotchevski and Reverge Studios, Inc.
|
|
|
|
//Distributed under the Boost Software License, Version 1.0. (See accompanying
|
|
//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
|
|
|
#ifndef UUID_490EADC876F011DDA2F00A4756D89593
|
|
#define UUID_490EADC876F011DDA2F00A4756D89593
|
|
|
|
namespace
|
|
boost
|
|
{
|
|
namespace
|
|
exception_detail
|
|
{
|
|
template <class T>
|
|
class
|
|
refcount_ptr
|
|
{
|
|
public:
|
|
|
|
refcount_ptr():
|
|
px_(0)
|
|
{
|
|
}
|
|
|
|
~refcount_ptr()
|
|
{
|
|
release();
|
|
}
|
|
|
|
refcount_ptr( refcount_ptr const & x ):
|
|
px_(x.px_)
|
|
{
|
|
add_ref();
|
|
}
|
|
|
|
refcount_ptr &
|
|
operator=( refcount_ptr const & x )
|
|
{
|
|
adopt(x.px_);
|
|
return *this;
|
|
}
|
|
|
|
void
|
|
adopt( T * px )
|
|
{
|
|
release();
|
|
px_=px;
|
|
add_ref();
|
|
}
|
|
|
|
T *
|
|
get() const
|
|
{
|
|
return px_;
|
|
}
|
|
|
|
private:
|
|
|
|
T * px_;
|
|
|
|
void
|
|
add_ref()
|
|
{
|
|
if( px_ )
|
|
intrusive_ptr_add_ref(px_);
|
|
}
|
|
|
|
void
|
|
release()
|
|
{
|
|
if( px_ )
|
|
intrusive_ptr_release(px_);
|
|
}
|
|
};
|
|
}
|
|
}
|
|
|
|
#endif
|