【发布时间】:2013-03-21 02:58:08
【问题描述】:
给定类定义如下:
struct A {
std::vector<int> aList;
A() {
for (int i = 0; i < ARRAY_LENGTH; i++)
aList.push_back(0);
}
}
程序的其他部分需要 A 的无参数构造函数。是否可以让 ARRAY_LENGTH 变化(比如从外部文件读取/从 gui 修改),以便
- 第 0 步:ARRAY_LENGTH = 10
- 第一步:创建A的对象,aList.size()初始化为10。
- 第二步:使用A新创建的对象
- 第 3 步:删除所有以前创建的 A 对象
- 步骤 4:使用不同的 ARRAY_LENGTH 值重复步骤 0 到 4,直到程序结束
ARRAY_LENGTH 的修改可以来自外部文件,也可以通过 gui 修改。并且程序的任何其他部分都不应该对该值具有写访问权。我怎样才能达到这个要求?
编辑:为了销毁现有对象,它将由程序的其他部分处理
Edit(2):我在做一个模拟项目,A类中的aList代表家庭规模可能的pdf值。 (假设 aList[0] = 0.5,aList[1] = 0.2,aList[3] = 0.3)。只有在程序运行不同的场景时才会发生最大家庭规模的变化,这意味着我将销毁之前创建的A的对象以重置模拟。
【问题讨论】:
-
在查看问题的其余部分之前,该代码应该是(在 C++03 中):
A() : aList(ARRAY_LENGTH) {} -
为什么不直接将所需的大小传递给构造函数?
-
我会说通过构造函数传递
ARRAY_LENGTH并在您想要更改它时创建一个新对象(看看您如何摆脱它们)。当然可以调整,但这似乎是您所描述的最简单的方法。 -
是否可以在
main()开始之前创建A对象?如果是这样,事情就会变得棘手。 -
听起来array_length应该是A的静态数据成员。你甚至可以在main之前初始化它,然后随时更改它。另一方面,没有安全的方法来销毁所有预先存在的 As。
标签: c++ constructor global-variables