C ++在类变量中分配矢量大小而没有默认初始化

时间:2016-02-19 03:15:28

标签: c++ vector initialization

所以我有一个类(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分配了正确的内存量。是否根据默认构造函数的结果确定对象的内存大小?

2 个答案:

答案 0 :(得分:2)

$bundle install没有用于预留容量的构造函数。保留容量的唯一方法是使用$gem list成员函数。

std::vector

Read more关于reserve

答案 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