[英]Can you dynamically allocate a class with a vector as a field in C++?
[英]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.