ano*_*non 4 c++ function new-operator delete-operator
为什么它不能只是常规函数调用?新的本质上是:
malloc(sizeof(Foo));
Foo::Foo();
Run Code Online (Sandbox Code Playgroud)
删除是
Foo:~Foo();
free(...);
Run Code Online (Sandbox Code Playgroud)
那么为什么new/delete最终会拥有自己的语法而不是常规函数呢?
小智 7
这是一个刺:
该new操作调用operator new()功能.类似地,delete操作员调用该operator delete()函数(类似于数组版本).
那么为什么呢?因为用户被允许重写operator new(),但不与new操作者(这是一个关键字).您重写operator new()(和删除)以定义自己的分配器,但是,您不负责(或允许)调用适当的构造函数和析构函数.编译器在看到new关键字时会自动调用这些函数.
如果没有这种二分法,用户可以覆盖该operator new()函数,但编译器仍然必须将其视为特殊函数,并为正在创建的对象调用适当的构造函数.