From bb8dfe4a3432a6e705a26c21cc5a3e859b93350f Mon Sep 17 00:00:00 2001 From: omar Date: Sat, 23 Dec 2017 23:10:26 +0100 Subject: [PATCH] Fixed incorrect IM_DELETE macro (9cda86d55a80c9f032af84f657b9fe8e6c7f3f52) (#1517, #484, #504) --- imgui_internal.h | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/imgui_internal.h b/imgui_internal.h index c08f5082..e161a6f1 100644 --- a/imgui_internal.h +++ b/imgui_internal.h @@ -160,14 +160,12 @@ static inline ImVec2 ImMul(const ImVec2& lhs, const ImVec2& rhs) // We call C++ constructor on own allocated memory via the placement "new(ptr) Type()" syntax. // Defining a custom placement new() with a dummy parameter allows us to bypass including which on some platforms complains when user has disabled exceptions. -struct ImNewAllocDummy {}; struct ImNewPlacementDummy {}; inline void* operator new(size_t, ImNewPlacementDummy, void* ptr) { return ptr; } inline void operator delete(void*, ImNewPlacementDummy, void*) {} // This is only required so we can use the symetrical new() -inline void operator delete(void* p, ImNewAllocDummy) { ImGui::MemFree(p); } -#define IM_PLACEMENT_NEW(_PTR) new(ImNewPlacementDummy(), _PTR) -#define IM_NEW(_TYPE) new(ImNewPlacementDummy(), ImGui::MemAlloc(sizeof(_TYPE))) _TYPE -#define IM_DELETE(_PTR) delete(ImNewAllocDummy(), _PTR), _PTR = NULL +#define IM_PLACEMENT_NEW(_PTR) new(ImNewPlacementDummy(), _PTR) +#define IM_NEW(_TYPE) new(ImNewPlacementDummy(), ImGui::MemAlloc(sizeof(_TYPE))) _TYPE +template void IM_DELETE(T*& p) { if (p) { p->~T(); ImGui::MemFree(p); p = NULL; } } //----------------------------------------------------------------------------- // Types