aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Hoelzl2017-11-18 08:46:53 +0100
committerMatthias Hoelzl2017-11-19 21:25:18 +0100
commit4c76c6892c1770f4e8f95bd8a4d8dcddf31d96d4 (patch)
treee9c0d3fabf688ce7a95241a9b45d8dfaa2ed2910
parent63283eca5542314ea5b71afa1fe39bd48c202a4d (diff)
downloadgodot-4c76c6892c1770f4e8f95bd8a4d8dcddf31d96d4.tar.gz
godot-4c76c6892c1770f4e8f95bd8a4d8dcddf31d96d4.tar.zst
godot-4c76c6892c1770f4e8f95bd8a4d8dcddf31d96d4.zip
-rw-r--r--core/os/memory.cpp20
-rw-r--r--core/os/memory.h8
2 files changed, 28 insertions, 0 deletions
diff --git a/core/os/memory.cpp b/core/os/memory.cpp
index 74d5cbbea..439951f71 100644
--- a/core/os/memory.cpp
+++ b/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;
diff --git a/core/os/memory.h b/core/os/memory.h
index f8b3da579..7801d5683 100644
--- a/core/os/memory.h
+++ b/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)