Since overriding global new
and delete
functions is not a viable option for a library (these functions are free to be overridden by the application if desired), a set of allocator functions were created for use by SpeedTree-associated code that would properly redirect the allocations through SpeedTree's heap allocation callback system.
These functions should only be used when:
Note that these functions are not expected to be widely used and are not a requirement for SpeedTree integration. There are four functions, duplicating the functionality of new
, new[]
, delete
, and delete[]
. Prototypes and example usages for each follow:
// operator new equivalent (must be paired with st_delete()) #define st_new(TYPE, pDescription) new (st_allocate<TYPE>(pDescription)) TYPE // example usage if object constructor takes no parameters CMyObject* pObject = st_new(CMyObject, "description here"); // example usage if object constructor takes two parameters CMyObject* pObject = st_new(CMyObject, "description here")(constr_param1, constr_param2); // operator new[] equivalent (must be paired with st_delete_array()) template <typename TYPE> inline TYPE* st_new_array(size_t sNumElements, const char* pDescription); // example usage CMyObject* pObjects = st_new_array<CMyObject>(10, "description here"); // operator delete equivalent (must be paired with placement new declared above) template <typename TYPE> inline void st_delete(TYPE*& pBlock, const char* pDescription); // example usage CMyObject* pObject = new ("description here") CMyObject; st_delete<CMyObject>(pObject); // operator delete[] equivalent (must be paired with st_new_array()) template <typename TYPE> inline void st_delete_array(TYPE*& pRawBlock, const char* pDescription); // example usage CMyObject* pObjects = st_new_array<CMyObject>(10, "description here"); st_delete_array<CMyObject>(pObjects);
Note: The delete functions will automatically set the passed in pointers to NULL.