Project

General

Profile

Feature #631 ยป ofnew_proposal.h

Jan Schlamelcher, 2015-04-16 11:29

 
#include "dcmtk/ofstd/oftraits.h"

template<typename T>
OFTypename OFenable_if<!OFis_array<T>::value,T*>::type OFnew( const T& t = T() )
{
#ifdef HAVE_STD__NOTHROW
return new (std::nothrow) T( t );
#else
/* make sure that the pointer is set to NULL in case of error */
try
{
return new T( t );
}
catch (STD_NAMESPACE bad_alloc const &)
{
return OFnullptr;
}
#endif
}

template<typename T>
OFTypename OFenable_if<OFis_array<T>::value,T*>::type OFnew( const size_t size )
{
#ifdef HAVE_STD__NOTHROW
return new (std::nothrow) T[size];
#else
/* make sure that the pointer is set to NULL in case of error */
try
{
return new T[size];
}
catch (STD_NAMESPACE bad_alloc const &)
{
return OFnullptr;
}
#endif
}

template<typename T>
void OFdelete( T* pT )
{
#if defined(HAVE_STD__NOTHROW) && defined(HAVE_NOTHROW_DELETE)
operator delete( pT, std::nothrow );
#else
delete pT;
#endif
}

template<typename T>
void OFdelete_array( T* pT )
{
#if defined(HAVE_STD__NOTHROW) && defined(HAVE_NOTHROW_DELETE)
operator delete[]( pT, std::nothrow );
#else
delete[] pT;
#endif
}

// Anwendung:

OFString* pS = OFnew<OFString>( "Hello Word" );
Uint8* value = OFnew<Uint8[]>( lengthField + 1 );
...
OFdelete( pS );
OFdelete_array( value );
    (1-1/1)