我的问题受到Thomas Cormen教授在他的Quora回答中第二条评论的影响。他说构造函数执行以下三个任务:
1. 为对象分配内存。 2. 初始化对象的实例变量,例如通过Python中的init隐式调用。(我还强调init方法应该初始化所有实例变量,而不是一些。) 3. 返回对(即地址)对象的引用。
然而,C++的MSDN文档表示,是new运算符完成了这个过程:
从自由存储器中为类型名称为对象或对象数组分配内存,并返回适当类型的非零指针以指向该对象。
1. 为对象分配内存。 2. 初始化对象的实例变量,例如通过Python中的init隐式调用。(我还强调init方法应该初始化所有实例变量,而不是一些。) 3. 返回对(即地址)对象的引用。
然而,C++的MSDN文档表示,是new运算符完成了这个过程:
从自由存储器中为类型名称为对象或对象数组分配内存,并返回适当类型的非零指针以指向该对象。
我的问题是,谁是对的?或者,也许像帖子上的评论所建议的那样,new
运算符总是调用构造函数,这其中是否还有其他更深层次的原因?
谢谢。
$不幸的是,Quora没有复制评论链接的选项 - 我只能复制回答的链接。
*虽然我说的是C ++,但我认为其他语言如Java和C#也是如此(不过我不确定)。
new
关键字的不同用法。有operator new
和new expressions
。operator new
分配内存,不调用构造函数并且可以被重载,new expressions
(通常)使用operator new
分配内存并调用构造函数。 - François Andrieux