Service
声明:
当创建类的对象时,C ++会调用构造函数 那个班。如果没有定义构造函数,C ++将调用默认值 构造函数,为对象分配内存,但不是 初始化它。
但我认为构造函数只负责初始化数据成员。我的理解不正确吗?
答案 0 :(得分:5)
重申我的评论,该教程是错误的。对象本身的存储不是构造函数的责任。如果你看一下对象生存期的{+ 3}}的C ++标准定义:
对象或引用的生命周期是的运行时属性 对象或参考。据说一个物体具有非空的 初始化,如果它是类或聚合类型,它或它之一 它的子对象由一个非常重要的构造函数初始化 默认构造函数。 [注意:通过简单的复制/移动进行初始化 构造函数是非空的初始化。 - 结束说明]一生 类型为T的对象在以下时间开始:
获得具有适当对齐方式的存储,并获得类型T的大小
如果对象具有非空的初始化,则其初始化已完成,
您将看到获取存储是对象生命周期描述中的单独项目。并且有充分的理由,因为存储可以通过多种方式获得:
operator new
。再说一次,不是c'tor会做的事情。构造函数总是在存储上运行(无论如何获得)以使对象在那里存在。
您从网站获得的报价是错误的两倍。由于默认c'tor可以很好地初始化对象以具有有效状态。考虑一下:
struct foo {
std::string a;
std::string b;
};
没有用户定义的c'tor,因此将合成编译器生成的一个。并且您可以确定它将默认将两个字符串初始化为有效状态(作为空字符串)。