Add a self-assignment assert to reset(). Also add an overload of reset to

allow resetting to a new pointer with a new deletion function.


[SVN r12491]
This commit is contained in:
Darin Adler
2002-01-24 19:16:12 +00:00
parent 09c1476063
commit 5d564a2f01
4 changed files with 10 additions and 1 deletions

View File

@ -72,6 +72,7 @@ public:
void reset(T * p = 0)
{
BOOST_ASSERT(p == 0 || p != px);
shared_array(p).swap(*this);
}

View File

@ -91,6 +91,7 @@ public:
void reset(T * p = 0)
{
BOOST_ASSERT(p == 0 || p != px);
shared_ptr(p).swap(*this);
}

View File

@ -71,6 +71,7 @@ public:
void reset(T * p = 0)
{
BOOST_ASSERT(p == 0 || p != px);
this_type(p).swap(*this);
}

View File

@ -33,7 +33,7 @@
#ifdef BOOST_MSVC // moved here to work around VC++ compiler crash
# pragma warning(push)
# pragma warning(disable:4284) // odd return type for operator->
#endif
#endif
namespace boost
{
@ -144,9 +144,15 @@ public:
void reset(T * p = 0)
{
BOOST_ASSERT(p == 0 || p != px);
this_type(p).swap(*this);
}
template<typename D> void reset(T * p, D d)
{
this_type(p, d).swap(*this);
}
typename detail::shared_ptr_traits<T>::reference operator* () const // never throws
{
BOOST_ASSERT(px != 0);