簡體   English   中英

C ++在類變量中分配矢量大小而沒有默認初始化

[英]C++ Allocate Vector Size in class variable without default 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分配了正確的內存量。 是否根據默認構造函數的結果確定對象的內存大小?

std::vector沒有用於保留容量的構造函數。 保留容量的唯一方法是使用reserve成員函數。

#DEFINE ARRAY_SIZE 10
class HostObject {
    //other member variables
    vector<Object1> vec;

    //default constructor
    HostObject(){
        vec.reserve(ARRAY_SIZE);
    }

    //my custom constructor
    HostObject(double parmeter1, double parameter2, doubleparameter3) {
        vec.reserve(ARRAY_SIZE);
        //some code doing some calculations 

        for (int i = 0; i <ARRAY_SIZE; i++){

            vec.push_back(Object1( double p1, int p2, double p3, intp4));

        }
    }
}

閱讀更多關於std::vector

您可以通過在默認構造函數中調用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM