Debug hook support, removed self-reset, fixed #%20links.

[SVN r16361]
This commit is contained in:
Peter Dimov
2002-11-21 13:10:18 +00:00
parent e555d33695
commit e32b2adfda
5 changed files with 69 additions and 41 deletions
+19 -7
View File
@@ -9,7 +9,7 @@
// This software is provided "as is" without express or implied
// warranty, and with no claim as to its suitability for any purpose.
//
// See http://www.boost.org/libs/smart_ptr/scoped_array.htm for documentation.
// http://www.boost.org/libs/smart_ptr/scoped_array.htm
//
#include <boost/assert.hpp>
@@ -20,6 +20,15 @@
namespace boost
{
// Debug hooks
#if defined(BOOST_ENABLE_SP_DEBUG_HOOKS)
void sp_array_constructor_hook(void * p);
void sp_array_destructor_hook(void * p);
#endif
// scoped_array extends scoped_ptr to arrays. Deletion of the array pointed to
// is guaranteed, either on destruction of the scoped_array or via an explicit
// reset(). Use shared_array or std::vector if your needs are more complex.
@@ -41,20 +50,23 @@ public:
explicit scoped_array(T * p = 0) : ptr(p) // never throws
{
#if defined(BOOST_ENABLE_SP_DEBUG_HOOKS)
boost::sp_array_constructor_hook(ptr);
#endif
}
~scoped_array() // never throws
{
checked_array_delete(ptr);
#if defined(BOOST_ENABLE_SP_DEBUG_HOOKS)
boost::sp_array_destructor_hook(ptr);
#endif
boost::checked_array_delete(ptr);
}
void reset(T * p = 0) // never throws
{
if (ptr != p)
{
checked_array_delete(ptr);
ptr = p;
}
BOOST_ASSERT(p == 0 || p != ptr); // catch self-reset errors
this_type(p).swap(*this);
}
T & operator[](std::ptrdiff_t i) const // never throws
+22 -6
View File
@@ -9,7 +9,7 @@
// This software is provided "as is" without express or implied
// warranty, and with no claim as to its suitability for any purpose.
//
// See http://www.boost.org/libs/smart_ptr/scoped_ptr.htm for documentation.
// http://www.boost.org/libs/smart_ptr/scoped_ptr.htm
//
#include <boost/assert.hpp>
@@ -22,6 +22,15 @@
namespace boost
{
// Debug hooks
#if defined(BOOST_ENABLE_SP_DEBUG_HOOKS)
void sp_scalar_constructor_hook(void * p);
void sp_scalar_destructor_hook(void * p);
#endif
// scoped_ptr mimics a built-in pointer except that it guarantees deletion
// of the object pointed to, either on destruction of the scoped_ptr or via
// an explicit reset(). scoped_ptr is a simple solution for simple needs;
@@ -44,27 +53,34 @@ public:
explicit scoped_ptr(T * p = 0): ptr(p) // never throws
{
#if defined(BOOST_ENABLE_SP_DEBUG_HOOKS)
boost::sp_scalar_constructor_hook(ptr);
#endif
}
#ifndef BOOST_NO_AUTO_PTR
explicit scoped_ptr(std::auto_ptr<T> p): ptr(p.release()) // never throws
{
#if defined(BOOST_ENABLE_SP_DEBUG_HOOKS)
boost::sp_scalar_constructor_hook(ptr);
#endif
}
#endif
~scoped_ptr() // never throws
{
checked_delete(ptr);
#if defined(BOOST_ENABLE_SP_DEBUG_HOOKS)
boost::sp_scalar_destructor_hook(ptr);
#endif
boost::checked_delete(ptr);
}
void reset(T * p = 0) // never throws
{
if(ptr != p)
{
this_type(p).swap(*this);
}
BOOST_ASSERT(p == 0 || p != ptr); // catch self-reset errors
this_type(p).swap(*this);
}
T & operator*() const // never throws