为什么c ++有新的和删除的单独语法?

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()函数,但编译器仍然必须将其视为特殊函数,并为正在创建的对象调用适当的构造函数.