Memory Management: Overloading Operator new and delete 2
In this lesson, we will refine the strategy for overloading operators new and delete.
We'll cover the following...
What were the not-so-nice properties of the previous lesson?
Firstly, we only get a hint of which memory was lost. Secondly, we had to prepare the whole bookkeeping of memory management at compile time. In this lesson, we aim to overcome these shortcomings.
Who is the Bad Guy?
Special tasks call for special strategies. We must use a small macro for debugging purposes.
Let’s take a look at this macro. #define new new(__FILE__, __LINE__)
The macro causes each new
call to be mapped onto the overloaded new call. This overloaded new
call also receives the name of the file and the line number respectively. That is exactly the information we need to solve this problem.
So, what will happen if we use the macro in line 6?
// overloadOperatorNewAndDelete2.cpp//#include "myNew4.hpp"//#include "myNew5.hpp"#define new new(__FILE__, __LINE__)#include <iostream>#include <new>#include <string>class MyClass{float* p= new float[100];};class MyClass2{int five= 5;std::string s= "hello";};int main(){int* myInt= new int(1998);double* myDouble= new double(3.14);double* myDoubleArray= new double[2]{1.1,1.2};MyClass* myClass= new MyClass;MyClass2* myClass2= new MyClass2;delete myDouble;delete [] myDoubleArray;delete myClass;delete myClass2;dummyFunction();//getInfo();}
The preprocessor substitutes all new
...