瀏覽代碼

Merge pull request #13006 from hoelzl/pr-placement-delete

Add placement deletes to avoid warnings on VC++
Rémi Verschelde 7 年之前
父節點
當前提交
4d5b82811f
共有 2 個文件被更改,包括 28 次插入0 次删除
  1. 20 0
      core/os/memory.cpp
  2. 8 0
      core/os/memory.h

+ 20 - 0
core/os/memory.cpp

@@ -44,6 +44,26 @@ void *operator new(size_t p_size, void *(*p_allocfunc)(size_t p_size)) {
 	return p_allocfunc(p_size);
 }
 
+#ifdef _MSC_VER
+void operator delete(void *p_mem, const char *p_description) {
+
+	ERR_EXPLAINC("Call to placement delete should not happen.");
+	CRASH_NOW();
+}
+
+void operator delete(void *p_mem, void *(*p_allocfunc)(size_t p_size)) {
+
+	ERR_EXPLAINC("Call to placement delete should not happen.");
+	CRASH_NOW();
+}
+
+void operator delete(void *p_mem, void *p_pointer, size_t check, const char *p_description) {
+
+	ERR_EXPLAINC("Call to placement delete should not happen.");
+	CRASH_NOW();
+}
+#endif
+
 #ifdef DEBUG_ENABLED
 uint64_t Memory::mem_usage = 0;
 uint64_t Memory::max_usage = 0;

+ 8 - 0
core/os/memory.h

@@ -72,6 +72,14 @@ void *operator new(size_t p_size, void *(*p_allocfunc)(size_t p_size)); ///< ope
 
 void *operator new(size_t p_size, void *p_pointer, size_t check, const char *p_description); ///< operator new that takes a description and uses a pointer to the preallocated memory
 
+#ifdef _MSC_VER
+// When compiling with VC++ 2017, the above declarations of placement new generate many irrelevant warnings (C4291).
+// The purpose of the following definitions is to muffle these warnings, not to provide a usable implementation of placement delete.
+void operator delete(void *p_mem, const char *p_description);
+void operator delete(void *p_mem, void *(*p_allocfunc)(size_t p_size));
+void operator delete(void *p_mem, void *p_pointer, size_t check, const char *p_description);
+#endif
+
 #define memalloc(m_size) Memory::alloc_static(m_size)
 #define memrealloc(m_mem, m_size) Memory::realloc_static(m_mem, m_size)
 #define memfree(m_size) Memory::free_static(m_size)