Browse Source

Silence delete compile warning in memory.h/cpp on Windows

Bastiaan Olij 3 năm trước cách đây
mục cha
commit
b07559882c
2 tập tin đã thay đổi với 27 bổ sung0 xóa
  1. 8 0
      include/godot_cpp/core/memory.hpp
  2. 19 0
      src/core/memory.cpp

+ 8 - 0
include/godot_cpp/core/memory.hpp

@@ -44,6 +44,14 @@ _ALWAYS_INLINE_ void *operator new(size_t p_size, void *p_pointer, size_t check,
 	return p_pointer;
 }
 
+#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
+
 namespace godot {
 
 class Memory {

+ 19 - 0
src/core/memory.cpp

@@ -51,3 +51,22 @@ void Memory::free_static(void *p_ptr) {
 void *operator new(size_t p_size, const char *p_description) {
 	return godot::Memory::alloc_static(p_size);
 }
+
+using namespace godot;
+
+#ifdef _MSC_VER
+void operator delete(void *p_mem, const char *p_description) {
+	ERR_PRINT("Call to placement delete should not happen.");
+	CRASH_NOW();
+}
+
+void operator delete(void *p_mem, void *(*p_allocfunc)(size_t p_size)) {
+	ERR_PRINT("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_PRINT("Call to placement delete should not happen.");
+	CRASH_NOW();
+}
+#endif