是隐式创建的默认构造函数,负责分配对象内存

Is the implicitly created default constructor responsible for allocating the objects memory?

本文关键字:分配 对象 内存 构造函数 创建 默认      更新时间:2023-10-16

www.fredosaurus.com指出:

创建了类的对象时,C 调用构造函数 那个课。如果未定义构造函数,则C 调用默认值 构造函数,它为对象分配内存,但没有 初始化它。

,但我认为构造函数仅负责初始化数据成员。我的理解不正确吗?

重申我的评论,教程是错误的。对象本身的存储不是构造函数的责任。如果您查看对象寿命的C 标准定义[BASIC.LIFE]/1:

对象或参考的寿命是 对象或参考。据说一个物体具有不变 初始化如果是类或骨料类型的,它或其中之一 它的子对象是由小动物以外的构造函数初始化的 默认构造函数。[注意:通过琐碎的副本/移动初始化 构造函数是非易变的初始化。 - 终点]一生 T型对象的开始时:

  • 存储具有适当的对齐方式和T型的大小,并且

  • 如果对象的初始化无面,则其初始化已完成,

您会看到,在对象寿命的描述中,获得存储是一个单独的项目。并且有充分的理由,由于可以通过多种方式获得存储:

  1. 它可能是静态存储。因此,c'tor 只能初始化对象。
  2. 它可能是自动存储,在此再次是管理它的运行时,而不是每次输入示波器时。
  3. 可以通过使用operator new来通过动态分配获得存储。再说一次,这不是C'tor会做的。

构造函数始终在存储(但是获得)以使对象存在于此。

您从网站上收到的报价是错误的。由于默认的c'tor可以很好地初始化对象具有有效状态。考虑一下:

struct foo {
  std::string a;
  std::string b;
};

没有用户定义的c'tor,因此生成的编译器将合成。您可以确定它将默认将两个字符串初始化为有效状态(如空字符串)。