summaryrefslogtreecommitdiffhomepage
path: root/FoundationEx/MemDebug.cpp
diff options
context:
space:
mode:
authorYasha Jannoo <alledodo@gmail.com>2019-09-12 00:41:34 +0100
committerYasha Jannoo <alledodo@gmail.com>2019-09-12 00:41:34 +0100
commite31b0c1803d976e29b258c7307e32fd0d63821e5 (patch)
tree2bb72d12e8a7b56fbbba41c6cef71453b2bc8083 /FoundationEx/MemDebug.cpp
parent5d694ca25f75a8809290f6fbd865ef9fd1eec12c (diff)
downloadstarshatter-e31b0c1803d976e29b258c7307e32fd0d63821e5.zip
starshatter-e31b0c1803d976e29b258c7307e32fd0d63821e5.tar.gz
starshatter-e31b0c1803d976e29b258c7307e32fd0d63821e5.tar.bz2
Fix ill-formed and warning-causing new overloaded and delete operators
From VS2015 onwards, overloaded new and delete operators were no longer allowed to be declared inline. See https://docs.microsoft.com/en-us/cpp/porting/visual-cpp-what-s-new-2003-through-2015?view=vs-2019. As a consequence of moving the definitions into source files, we cannot simply include the headers in the files they are required in without also either creating a static library or including the source files in the projects. Do the latter as the pattern fits other examples of dependencies across projects in the solution. The overloaded operator definitions could be made neater in a future change. For now they are written as their declarations appear in the header file, with the same ifdefs as in the header file.
Diffstat (limited to 'FoundationEx/MemDebug.cpp')
-rw-r--r--FoundationEx/MemDebug.cpp65
1 files changed, 65 insertions, 0 deletions
diff --git a/FoundationEx/MemDebug.cpp b/FoundationEx/MemDebug.cpp
index 2694b33..4f3174f 100644
--- a/FoundationEx/MemDebug.cpp
+++ b/FoundationEx/MemDebug.cpp
@@ -45,7 +45,9 @@
// +--------------------------------------------------------------------+
+#ifndef FOUNDATION_USE_MFC
static Memory::LEVEL mem_chk_level = Memory::PERIODIC;
+#endif
#ifdef _DEBUG
static _CrtMemState mem_chk_p1,
@@ -61,6 +63,66 @@ static HANDLE mem_log_file = 0;
#define CrtClrDebugField(a) _CrtSetDbgFlag(~(a) & _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG))
#endif
+#ifdef FOUNDATION_USE_MFC
+
+#ifndef _DEBUG
+
+void* __cdecl operator new(unsigned int s, const char*, int)
+{
+ return ::operator new(s);
+}
+
+void __cdecl operator delete(void* p, const char*, int)
+{
+ ::operator delete(p);
+}
+
+#else
+
+// No definitions for the following:
+//void* __cdecl operator new(unsigned int s, const char*, int) {}
+//void __cdecl operator delete(void* p, const char*, int) {}
+
+#endif
+
+#else // if not defined FOUNDATION_USE_MFC
+
+#ifndef _DEBUG
+
+void* __cdecl operator new(unsigned int s, const char*, int)
+{
+ return ::operator new(s);
+}
+
+void __cdecl operator delete(void* p, const char*, int)
+{
+ ::operator delete(p);
+}
+
+#else
+
+// No definitions for the following:
+//void* __cdecl operator new(unsigned int, int, const char*, int) {}
+
+void* __cdecl operator new(unsigned int s, const char* f, int l)
+{
+ return ::operator new(s, 1, f, l);
+}
+
+void* __cdecl operator new(unsigned int s)
+{
+ return ::operator new(s, 1, __FILE__, __LINE__);
+}
+
+void __cdecl operator delete(void* p, const char*, int)
+{
+ ::operator delete(p);
+}
+
+#endif _DEBUG
+
+#endif FOUNDATION_USE_MFC
+
static void heapdump()
{
_HEAPINFO hinfo;
@@ -107,6 +169,7 @@ static void heapdump()
// +--------------------------------------------------------------------+
+#ifndef FOUNDATION_USE_MFC
void
Memory::OpenLog(const char* filename)
{
@@ -234,3 +297,5 @@ Memory::SetLevel(LEVEL l)
#endif
}
+#endif
+