所以我有一个类(HostObject),里面有一个复杂类(object1)的向量。如下面描述的伪代码
#DEFINE ARRAY_SIZE 10
class HostObject {
//other member variables
vector<Object1> vec(ARRAY_SIZE);
//default constructor
HostObject(){
//leave vector default constructed
}
//my custom constructor
HostObject(double parmeter1, double parameter2, doubleparameter3) {
//some code doing some calculations
for (int i = 0; i <ARRAY_SIZE; i++){
vec.push_back(Object1( double p1, int p2, double p3, intp4));
}
}
}
我知道在创建HostObject时编写此代码的方式,矢量将使用默认构造的Object1s进行初始化。我的代码需要一个向量,所以我希望编译器知道向量的大小是什么,这样它就可以适当地分配向量所需的内存。我知道如果我想要一个更动态的分配,我可以使用reserve。
我想我的问题是: 它们是一种在定义向量时保留向量空间的方法,它不需要对象中的对象进行默认初始化或使用保留函数吗?
编辑:
我的目标是分配内存空间,这样当我构造一个HostObject类型的对象数组时,get分配了正确的内存量。是否根据默认构造函数的结果确定对象的内存大小?
答案 0 :(得分:2)
答案 1 :(得分:1)
您可以通过在默认构造函数中调用reserve()
来完成此操作。
#DEFINE ARRAY_SIZE 10
class HostObject {
//other member variables
vector<Object1> vec; //vec(ARRAY_SIZE); // not here
//default constructor
HostObject() {
//leave vector default constructed
vec.reserve(ARRAY_SIZE); // but here
}
//my custom constructor // no need to change, since push_back will increase size automatically
HostObject(double parmeter1, double parameter2, doubleparameter3) {
//some code doing some calculations
for (int i = 0; i <ARRAY_SIZE; i++) {
vec.push_back(Object1(double p1, int p2, double p3, intp4));
}
}
}
另请考虑使用static unsigned array_size = 10;
作为类HostObject
的成员,以便每次创建HostObject
的对象时都可以动态更改大小。
HostObject ho1; // array size is 10
HostObject::array_size = 20;
HostObject ho2; // array size is 20