www.fredosaurus.com指出:
创建类的对象时,C++调用该类的构造函数。如果未定义构造函数,C++将调用默认构造函数,该构造函数为对象分配内存,但不对其进行初始化。
但我认为构造函数只负责初始化数据成员。我的理解不正确吗?
发布于 2017-09-24 06:16:10
重申我的意见,该教程是错误的。对象本身的存储不是构造函数的责任。如果您查看对象生存期的C++标准定义,[basic.life]/1
对象或引用的生存期是对象或引用的运行时属性。如果一个对象是一个类或聚合类型,并且它或它的一个子对象由一个构造函数初始化,而不是一个普通的默认构造函数,则该对象被称为非空初始化。 注意:由简单的复制/移动构造函数初始化是非空初始化。 - 结束注意 类型的对象的生存期从以下时间开始:
您将看到,获取存储是对象生存期描述中的一个单独项。而且有一个很好的理由,因为可以通过多种方式获得存储:
operator new。再说一次,这是不可能的事。构造函数总是在存储(无论如何获得)上操作,以使一个对象在那里出现。
你从网站上得到的报价是错误的。因为默认的c‘to可以很好地初始化对象,使其具有有效状态。考虑到这一点:
struct foo {
std::string a;
std::string b;
};没有用户定义的C‘’tor,因此将合成生成的编译器。您可以确定,它将默认将两个字符串初始化为有效状态(作为空字符串)。
https://stackoverflow.com/questions/46387101
复制相似问题