是隐式创建的默认构造函数,负责分配对象内存
Is the implicitly created default constructor responsible for allocating the objects memory?
www.fredosaurus.com
指出:
创建了类的对象时,C 调用构造函数 那个课。如果未定义构造函数,则C 调用默认值 构造函数,它为对象分配内存,但没有 初始化它。
,但我认为构造函数仅负责初始化数据成员。我的理解不正确吗?
重申我的评论,教程是错误的。对象本身的存储不是构造函数的责任。如果您查看对象寿命的C 标准定义[BASIC.LIFE]/1:
对象或参考的寿命是 对象或参考。据说一个物体具有不变 初始化如果是类或骨料类型的,它或其中之一 它的子对象是由小动物以外的构造函数初始化的 默认构造函数。[注意:通过琐碎的副本/移动初始化 构造函数是非易变的初始化。 - 终点]一生 T型对象的开始时:
存储具有适当的对齐方式和T型的大小,并且
如果对象的初始化无面,则其初始化已完成,
您会看到,在对象寿命的描述中,获得存储是一个单独的项目。并且有充分的理由,由于可以通过多种方式获得存储:
- 它可能是静态存储。因此,c'tor 只能初始化对象。
- 它可能是自动存储,在此再次是管理它的运行时,而不是每次输入示波器时。
- 可以通过使用
operator new
来通过动态分配获得存储。再说一次,这不是C'tor会做的。
构造函数始终在存储(但是获得)以使对象存在于此。
您从网站上收到的报价是错误的。由于默认的c'tor可以很好地初始化对象具有有效状态。考虑一下:
struct foo {
std::string a;
std::string b;
};
没有用户定义的c'tor,因此生成的编译器将合成。您可以确定它将默认将两个字符串初始化为有效状态(如空字符串)。
相关文章:
- 使用操作重载对象重新分配对象
- 静态分配对象的值初始化
- C++ 将抽象类型的动态分配对象传递给函数并存储在向量中
- 堆分配对象中的堆栈对象在 c++ 中在哪里分配?
- 在 c++ 的构造函数中分配对象向量时出错
- 动态分配对象中的字段-动态分配更好还是静态分配更好?C++
- 操作后通过运算符分配对象
- 如何捕获源自静态分配对象的构造函数的异常?
- 在C++中,当重新分配对象时,为什么构造函数在析构函数之前触发?
- 如何使用每个对象的单个构造函数参数动态分配C++对象数组?
- 将动态分配对象传递到 boost::any 构造函数中
- 混合指向已分配对象和作用域对象的指针
- C 删除指向动态分配对象的指针
- 有关动态分配对象的问题
- 类的堆分配对象是否在其作用域之后但在 C++ 中调用其析构函数之前处于活动状态
- C++ 中的黑白堆分配对象和堆栈分配对象的性能差异
- 是隐式创建的默认构造函数,负责分配对象内存
- 如何删除用于动态分配对象的智能指针
- 分配对象数组时如何初始化每个对象
- 用于堆栈分配对象的C++虚拟析构函数内联