浏览代码

Fixed incorrect IM_DELETE macro (9cda86d55a80c9f032af84f657b9fe8e6c7f3f52) (#1517, #484, #504)

omar 7 年之前
父节点
当前提交
bb8dfe4a34
共有 1 个文件被更改,包括 3 次插入5 次删除
  1. 3 5
      imgui_internal.h

+ 3 - 5
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 <new> 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 <typename T> void IM_DELETE(T*& p) { if (p) { p->~T(); ImGui::MemFree(p); p = NULL; } }
 
 //-----------------------------------------------------------------------------
 // Types