Added array forms of new and delete.
git-svn-id: svn://svn.code.sf.net/p/loki-lib/code/trunk@273 7ec92016-0320-0410-acc4-a06ded1c099a
This commit is contained in:
parent
abe707a047
commit
b97d31ab25
1 changed files with 60 additions and 0 deletions
|
@ -309,6 +309,63 @@ namespace Loki
|
||||||
::operator delete ( p, place );
|
::operator delete ( p, place );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef LOKI_SMALL_OBJECT_USE_NEW_ARRAY
|
||||||
|
|
||||||
|
/// Throwing array-object new throws bad_alloc when allocation fails.
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
/// @note MSVC complains about non-empty exception specification lists.
|
||||||
|
static void * operator new [] ( std::size_t size )
|
||||||
|
#else
|
||||||
|
static void * operator new [] ( std::size_t size )
|
||||||
|
throw ( std::bad_alloc )
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
typename MyThreadingModel::Lock lock;
|
||||||
|
(void)lock; // get rid of warning
|
||||||
|
return MyAllocatorSingleton::Instance().Allocate( size, true );
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Non-throwing array-object new returns NULL if allocation fails.
|
||||||
|
static void * operator new [] ( std::size_t size,
|
||||||
|
const std::nothrow_t & ) throw ()
|
||||||
|
{
|
||||||
|
typename MyThreadingModel::Lock lock;
|
||||||
|
(void)lock; // get rid of warning
|
||||||
|
return MyAllocatorSingleton::Instance().Allocate( size, false );
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Placement array-object new merely calls global placement new.
|
||||||
|
inline static void * operator new [] ( std::size_t size, void * place )
|
||||||
|
{
|
||||||
|
return ::operator new( size, place );
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Array-object delete.
|
||||||
|
static void operator delete [] ( void * p, std::size_t size ) throw ()
|
||||||
|
{
|
||||||
|
typename MyThreadingModel::Lock lock;
|
||||||
|
(void)lock; // get rid of warning
|
||||||
|
MyAllocatorSingleton::Instance().Deallocate( p, size );
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Non-throwing array-object delete is only called when nothrow
|
||||||
|
new operator is used, and the constructor throws an exception.
|
||||||
|
*/
|
||||||
|
static void operator delete [] ( void * p,
|
||||||
|
const std::nothrow_t & ) throw()
|
||||||
|
{
|
||||||
|
typename MyThreadingModel::Lock lock;
|
||||||
|
(void)lock; // get rid of warning
|
||||||
|
MyAllocatorSingleton::Instance().Deallocate( p );
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Placement array-object delete merely calls global placement delete.
|
||||||
|
inline static void operator delete [] ( void * p, void * place )
|
||||||
|
{
|
||||||
|
::operator delete ( p, place );
|
||||||
|
}
|
||||||
|
#endif // #if use new array functions.
|
||||||
|
|
||||||
#endif // #if default template parameters are not zero
|
#endif // #if default template parameters are not zero
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
@ -385,6 +442,9 @@ namespace Loki
|
||||||
// Nov. 26, 2004: re-implemented by Rich Sposato.
|
// Nov. 26, 2004: re-implemented by Rich Sposato.
|
||||||
//
|
//
|
||||||
// $Log$
|
// $Log$
|
||||||
|
// Revision 1.11 2005/09/27 00:41:13 rich_sposato
|
||||||
|
// Added array forms of new and delete.
|
||||||
|
//
|
||||||
// Revision 1.10 2005/09/26 21:38:54 rich_sposato
|
// Revision 1.10 2005/09/26 21:38:54 rich_sposato
|
||||||
// Changed include path to be direct instead of relying upon project settings.
|
// Changed include path to be direct instead of relying upon project settings.
|
||||||
//
|
//
|
||||||
|
|
Loading…
Reference in a new issue