diff --git a/Src/Utils/FMemStats.cpp b/Src/Utils/FMemStats.cpp index 893ba13b838ff024e09b471e2058f6232029d452..6be6b571385051cc8a435e4134943050717bdda8 100755 --- a/Src/Utils/FMemStats.cpp +++ b/Src/Utils/FMemStats.cpp @@ -33,14 +33,28 @@ FMemStats FMemStats::controler; } // Regular scalar delete - void operator delete(void* p) { + void operator delete(void* p) noexcept{ if(p){ FMemStats::controler.deallocate( *(reinterpret_cast<size_t*>(static_cast<unsigned char*>(p) - 8)) ); std::free(static_cast<unsigned char*>(p) - 8); } } - void operator delete[](void* p) { + void operator delete[](void* p) noexcept{ + if(p){ + FMemStats::controler.deallocate( *(reinterpret_cast<size_t*>(static_cast<unsigned char*>(p) - 8)) ); + std::free(static_cast<unsigned char*>(p) - 8); + } + } + + void operator delete ( void* p, const std::nothrow_t& /*tag*/) { + if(p){ + FMemStats::controler.deallocate( *(reinterpret_cast<size_t*>(static_cast<unsigned char*>(p) - 8)) ); + std::free(static_cast<unsigned char*>(p) - 8); + } + } + + void operator delete[]( void* p, const std::nothrow_t& /*tag*/) { if(p){ FMemStats::controler.deallocate( *(reinterpret_cast<size_t*>(static_cast<unsigned char*>(p) - 8)) ); std::free(static_cast<unsigned char*>(p) - 8); diff --git a/Src/Utils/FMemStats.h b/Src/Utils/FMemStats.h index 33d191e74abe19afdaed1a0a10c1b61098756e6d..a28583b5e5d4bdc3ba0c51816e04cadc4bccc109 100755 --- a/Src/Utils/FMemStats.h +++ b/Src/Utils/FMemStats.h @@ -32,8 +32,10 @@ #include <stdexcept> #warning You are using mem stats void* operator new(std::size_t n); -void operator delete(void* p); -void operator delete[](void* p); +void operator delete(void* p) noexcept; +void operator delete[](void* p) noexcept; +void operator delete ( void* ptr, const std::nothrow_t& tag); +void operator delete[]( void* ptr, const std::nothrow_t& tag); #endif /** Give the memory allocation details @@ -64,8 +66,10 @@ private: #ifdef ScalFMM_USE_MEM_STATS friend void* operator new(std::size_t n); - friend void operator delete(void* p); - friend void operator delete[](void* p); + friend void operator delete(void* p) noexcept; + friend void operator delete[](void* p) noexcept; + friend void operator delete ( void* ptr, const std::nothrow_t& tag); + friend void operator delete[]( void* ptr, const std::nothrow_t& tag); #endif public: