每个类中都包含默认的new, delete, C++程序员可以对new和delete进行重载,达到想要的功能。
重载new操作符格式如下
static void* operator new(size_t t){ return xxx;}
如果直接返回nullptr, 那么这个类就无法进行new操作了。
重载delete操作符格式如下:
static void operator delete(void* p){}具体应用
下面是在Test类中重载new、delete, 代码如下:
#include using namespace std;class Test{public: Test() { cout << "我是构造函数" << endl;; } ~Test() { cout << "我是析构" << endl; } //重载new操作符 static void* operator new(size_t t) { cout << "调用重载的new" << endl; Test* p = ::new Test(); return p; } //重载delete static void operator delete(void* p) { cout << "调用重载的delete" << endl; ::delete p; }};int main(){ Test* p1 = new Test(); delete p1; return 0;}
在一些开源库中,经常会对new, delete进行重载,已达到内存自动管理的效果。