簡體   English   中英

您可以動態分配向量嗎?

[英]Can you dynamically allocate a vector?

我需要我的向量容器來保持分配它的功能的結束。

void initVector() {
    vector<obj1*> R;
}

為什么這無效?

void initVector() {
    vector<obj1*> R = new vector<obj1*>;
}

它應該是vector<obj1*>* R = new vector<obj1*>; 但是,對於C ++ 11的移動語義,通常不需要使用指針或引用來避免昂貴的副本。 在使用vector的情況下,以下代碼不會復制tempVec它將至少移動它。 編譯器將刪除副本的可能性更大。 您可以在此處了解更多信息。

vector<obj1*> getVector()
{
 vector<obj1*> tempVec;
 //populate tempVec;
 return tempVec;//The standard guarantees a move at least. Compilers are free to elide this copy.
}

編輯:正如@juanchopanza在評論中指出的那樣,如果您有充分的理由這樣做,請謹慎管理分配在堆R上的向量的生存期。 這不是該語句特有的問題-它通常適用於動態分配的結構。 但是,這里可能需要特別提及,因為您有一個指針vector 除了正確管理R的生存期外,還需要仔細管理它包含的obj1*的生存期。 當持有對象的指針超出范圍時,不會刪除在堆上分配的對象。 使用完后,您將必須在指向該存儲位置的指針上手動調用delete 這既適用於vector* R ,也適用於它所包含的obj* ,除非由程序的其他部分擁有。

暫無
暫無

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

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