【发布时间】:2019-12-28 22:07:11
【问题描述】:
我想知道在 C++ 中调用类的构造函数时会发生什么。更具体地说,调用了哪些其他函数,以及如何调用。如果使用new,它是调用一些内置函数在堆栈上构造对象,还是调用malloc在堆上构造它?是否使用了默认分配器?
一般来说,不调用构造函数就可以使用类和对象吗?
编辑:一个很好的问题可能有助于我想要解决的问题,是:为什么构造函数不返回任何东西?最初,我认为新手程序员会期望构造函数返回对象,但事实并非如此。会发生什么?
【问题讨论】:
-
不存在“调用构造函数”的语法。请举例说明您的意思。
-
@LightnessRacesBY-SA3.0 可以说placement-new 实际上是一个构造函数调用。
-
@LightnessRacesBY-SA3.0 我的意思是“auto x = X()”的结尾,其中 X 是类的名称。
-
@AnthonyMonterrosa 啊,一个常见的误解。那不是“调用构造函数”。我知道您似乎正在调用一个名为
X的函数,但您不是。构造函数的调用是为您完成的,隐藏在机械层后面;你在那里做的是使用功能转换符号来请求创建一个临时类型的X。 -
@HolyBlackCat 因为它不是一个。它的位置新。它开始了对象的生命周期。其中一部分可能涉及构造函数的[自动]调用等。构造函数不是创建对象的东西。构造函数是一个可选的额外功能,它执行一些对象创建后的任务。
标签: c++ constructor allocation