为什么不能只是常规函数调用?新本质上是:
malloc(sizeof(Foo));
Foo::Foo();
虽然删除是
Foo:~Foo();
free(...);
那么为什么 new/delete 最终拥有自己的语法而不是常规函数?
最佳答案
这是一个尝试:
new
运算符调用operator new()
函数。类似地,delete
运算符调用 operator delete()
函数(对于数组版本也是如此)。
这是为什么呢?因为允许用户覆盖 operator new()
但不能 new
运算符(这是一个关键字)。您覆盖 operator new()
(并删除)以定义您自己的分配器,但是,您不负责(或不允许)调用适当的构造函数和析构函数。编译器在看到 new
关键字时会自动调用这些函数。
如果没有这种二分法,用户可以覆盖 operator new()
函数,但编译器仍然必须将其视为一个特殊函数并调用适当的构造函数(s) 用于正在创建的对象。
关于c++ - 为什么 c++ 有单独的新和删除语法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2286016/