【发布时间】:2019-07-03 12:51:42
【问题描述】:
我有一个带有成员数组的类。长度是一个常数,但是这个常数直到编译时才知道(在我的实际代码中,这个常数对于不同的编译目标有不同的定义)。数组的类型是一个没有默认构造函数的类。
#define CONSTANT 2
class Data {
public:
Data(int number){}
};
class DemoClass {
private:
Data _member[CONSTANT];
public:
DemoClass():
_member{
Data(0),
Data(0)
}
{
// stuff
}
};
在这个例子中,我可以使用初始化列表设置_member。但是,如果 COSNTANT 的值发生变化,我必须更改该初始化列表。
理论上,将DemoClass 更改为具有一个默认构造函数,该构造函数使用0 的参数调用另一个构造函数,这适用于我的情况,因为我将始终使用0 调用Data 构造函数。但是,我无法更改 DemoClass,因为它位于外部库中。
我考虑过的一个解决方案是创建以下类:
class CustomData : public Data {
public:
CustomData() : Data(0){}
};
这可行,但似乎有点复杂。有没有更简单的方法来初始化这个数组?
【问题讨论】:
-
使用
std::vector。它有一个构造函数,您可以为要创建的对象数量提供一个值,以及一个要复制到所有这些对象中的对象。 -
我正在一个环境中工作,我希望尽量减少动态内存分配的使用。有没有办法在没有动态分配的情况下获得
std::vector的这个功能? -
您可以编写/获取堆栈分配器并将其用作向量的分配器,因此它不使用堆。
-
以这种方式使用初始化列表意味着您要手动初始化每个成员。如果要将所有元素初始化为一个值,请遍历元素并将该值分配给它们。
-
你确实有
Data(),这就是默认构造函数。编辑:无论如何,在你编辑它之前你已经在那里了。
标签: c++ c++11 initialization