c++ - `new` 运算符是否总是调用构造函数?
问题描述
我的问题受到 Thomas Cormen 教授对其 Quora 答案 $ 的第二条评论的影响。
他说构造函数执行以下三个任务:
为对象分配内存。
初始化对象的实例变量,例如,通过在 Python 中隐式调用init 。(我还强调init方法应该初始化的不是一些,而是所有的实例变量。)
返回对对象的引用(即地址)。
但是,C++ *的MSDN 文档说是操作员执行此操作:new
从空闲存储中为类型名称的对象或对象数组分配内存,并返回指向该对象的适当类型的非零指针。
我的问题是,谁是对的?或者,是否还有更多内容,比如new
操作员总是调用构造函数,正如帖子上的评论所建议的那样?
谢谢。
$ 不幸的是,Quora 没有复制评论链接的选项 - 我只能为答案这样做。
* 虽然我说的是 C++,但我认为对于 Java 和 C# 等其他语言也是如此(虽然我不是 100% 肯定)。
解决方案
如果您constructor
在链接的 MSDN 页面上搜索,它会显示:
当
new
用于为 C++ 类对象分配内存时,在分配内存后调用对象的构造函数。
换句话说,如果存在,则调用构造函数。如果不存在,则调用 none。
推荐阅读
- python - 从 python 模块正确返回布尔变量
- java - 使用 TestNg 进行 vert.x 测试
- javascript - 从给定键的 JSON 中获取值,其中父键名称是动态的
- python - Django中配置不正确的urls.py
- multithreading - 如果参数不是原语,则不调用颤振计算函数?
- docker - Docker-compose & Traefik 2 & 自定义域路由到本地主机
- angular - 为什么以及何时在 Typescript 中使用 Symbol 数据类型?
- java - 自定义 toString 方法的自定义注解,从 ArrayList 返回前 10 个元素
- c# - 应用程序默认凭据不可用。如果在 .NET C# 中的 Google Compute Engine 中运行,则可以使用它们
- pandas - 值的长度与使用 np.linspace for pandas 的索引长度不匹配