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

标签 c++ function new-operator delete-operator

为什么不能只是常规函数调用?新本质上是:

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/

相关文章:

c++ - __STDCPP_DEFAULT_NEW_ALIGNMENT__ 和alignof(std::max_align_t)之间的顺序

c++ - 如何使用前向声明类的成员函数?

c++ - 创建/改进 makefile

python - (Python) 确定 (x, y) 坐标是否共线的脚本 - 出现一些错误

c++ - 试图使我的第一个程序循环(C++)

c++ - new[] 是否连续分配内存?

c++ - 如何围绕它的一个顶点旋转一条线

c++ - C++ 标准库中是否有用于比较迭代器类别的工具

javascript - 如何编辑此函数以仅在输入字段完成时运行?

c++ - 如何从 C++ 中的文件中读取乘法字符数组