#include<iostream>
#include<cstdlib>
#include<new>
using namespace std;
class T{
public:
T(){
cout << "构造函数。" << endl;
}
~T(){
cout << "析构函数。" << endl;
}
void * operator new(size_t sz){
T * t = (T*)malloc(sizeof(T)); //operator new就是简单的分配内存即可
cout << "内存分配。" << endl;
return t;
}
void operator delete(void *p){
free(p);
cout << "内存释放。" << endl;
return;
}
void operator + ( T &c2){
cout << "operator +" << endl;
}
};
int main()
{
T * t = ::new T(); // 先 内存分配 ,再 构造函数(new 用的是自己的operator new ,::new用的是外层的operator new)
delete t; // 先 析构函数, 再 内存释放(用的是自己重载的operator delete)
void *p = T::operator new(5);//直接调用构造函数。
T t1;
T::operator +(t1);//cannot call member function ‘void T::operator+(T&)’ without object
return 0;
}
参考文章如下:在C++中,你真的会用new吗? - 华为云开发者联盟的个人空间 - OSCHINA - 中文开源技术交流社区