向数组中添加具有构造函数的对象
C++ Adding objects that have constructors to an array
当我声明一个数组时,所有的变量/对象都被声明了。但是,如果对象的类有构造函数,那么对象会发生什么呢?我使用的类有2个构造函数-一个没有参数,一个有几个参数。第一个构造函数会在声明之后激活吗?或者没有构造函数被激活?
如果发生第一种情况,我将不得不创建一个函数来替换构造函数。
那么,新声明的数组中的对象会发生什么呢?
这取决于您如何声明数组。成员可以是default、value或copy-initialized:
Foo x[] = { Foo(1), Foo(true, 'a'), Foo() }; // copy-initialize
Foo x[3] = { }; // value-initialize
Foo x[3]; // default-initialize
对于类类型,默认和值初始化调用默认构造函数。复制初始化可以直接调用相应的构造函数。
如果您不想使用默认构造函数,则不需要绕过大括号初始化式并拼写每个成员。
如果底层类型具有非平凡的默认构造函数,则数组将调用所有对象的默认构造函数。
我记不清具体的规则了,但是int、char*s、其成员都有平凡构造函数的结构体等等,都有平凡的默认构造函数。这些东西的数组(以及这些东西的数组的数组,等等)不会被初始化,除非你显式地这样做。
显式声明的默认构造函数绝不是微不足道的,因此数组中的Foo对象将被默认构造。
相关文章:
- 对象实例化调用构造函数的次数太多
- Arduino C++在构造函数中用参数声明对象数组
- 模板,函数使用错误的构造函数来复制我的对象
- 我使用向量来创建类对象列表.初始化向量时如何使用参数调用构造函数?
- std::vector::p ush_back() 不会在 MSVC 上编译具有已删除移动构造函数的对象
- 通过构造函数创建的所有对象都具有相同的向量
- 是什么让放置新调用对象的构造函数?
- 复制包含C++所有元素的对象!(构造函数和赋值,最佳实践?
- C++ 对象指针数组的复制构造函数
- 在构造函数中输入对象时C++类成员作用域
- C++:将初始化的对象传递给另一个类的构造函数;需要不必要的构造函数吗?
- 这个C++编译器优化(在自身的实例上调用对象自己的构造函数)的名称是什么,它是如何工作的?
- 如何从构造函数副本 T(const T&)调用对象 T?
- 将另一个类的对象传递到当前类C++的构造函数中(不是成员初始化)
- 如何将我编写的对象传递到另一个类的构造函数中?
- 使用向量初始化参数化构造函数的对象数组
- 在C++中将对象从另一个类传递到另一个类的构造函数?
- 在 C++ 中声明 const 对象需要用户定义的默认构造函数.如果我有一个可变成员变量,为什么不呢?
- 构造函数对象赋值是否泄漏内存
- gcc中不可移动构造函数对象的std::函数