new和delete都是C++的关键字,不可重载。其底层的行为可以看作多个函数的组合。
一、自己实现new与delete的功能
#include <iostream>
using namespace std;class Student{
private:int age{24};
public:Student(){cout<<"start"<<endl;}~Student(){cout<<"end"<<endl;}void f(){cout<<"age = "<<age<<endl;}
};int main(void) {Student * p = (Student *)operator new(sizeof(Student));    //自己实现newnew(p) Student;p->f();p->~Student();          //自己实现deleteoperator delete(p);return 0;
}
第一行:
 Student * p = (Student *)operator new(sizeof(Student));
 operator new是C++自带的函数,可以重载。准确调用方法是:
 ::operator new(sizeof(Student));
 ::表示全局命名空间,注意不是std::标准命名空间!
 底层调用的是malloc函数,实际上返回的是void * 指针。参数表示要申请的字节数。
第二行:
 new§ Student;
 表示在给定的地址(堆上地址)执行构造函数。
对应delete的操作:
 p->~Student();表示在某个地址上执行析构函数。
 operator delete§;
 调用的是C++自带的函数,同样可以重载。底层调用的是free()函数。