首页 > 解决方案 > `new` 运算符是否总是调用构造函数?

问题描述

我的问题受到 Thomas Cormen 教授对其 Quora 答案 $ 的第二评论影响。

他说构造函数执行以下三个任务:

  1. 为对象分配内存。

  2. 初始化对象的实例变量,例如,通过在 Python 中隐式调用init 。(我还强调init方法应该初始化的不是一些,而是所有的实例变量。)

  3. 返回对对象的引用(即地址)。

但是,C++ *的MSDN 文档说是操作员执行此操作:new

从空闲存储中为类型名称的对象或对象数组分配内存,并返回指向该对象的适当类型的非零指针。

我的问题是,谁是对的?或者,是否还有更多内容,比如new操作员总是调用构造函数,正如帖子上的评论所建议的那样?

谢谢。

$ 不幸的是,Quora 没有复制评论链接的选项 - 我只能为答案这样做。
* 虽然我说的是 C++,但我认为对于 Java 和 C# 等其他语言也是如此(虽然我不是 100% 肯定)。

标签: c++constructornew-operator

解决方案


如果您constructor在链接的 MSDN 页面上搜索,它会显示:

new用于为 C++ 类对象分配内存时,在分配内存后调用对象的构造函数。

换句话说,如果存在,则调用构造函数。如果不存在,则调用 none。


推荐阅读