[英]Vector as a class member
你好我有這個問題:我想有一個矢量作為類成員。 這對我來說可能更容易,我為此道歉。
std::vector<int> *myVector;
或者std::vector<int> myVector
? 這個對嗎?
if(myCondition)
{
if(!myVector) //is this correct?
myVector = new std::vector<int>(); //is this correct? on this i have a error
}
你當然希望使用std::vector<int> myVector
。 無需初始化它,因為它會在類的構造函數中自動初始化,並在類被銷毀時釋放。
只需使用自動分配:將其聲明為如下所示的成員:
class YourClass
{
std::vector<int> myVector;
// ...
};
在運行任何構造函數之前自動構造數組,並在釋放對象時自動銷毀該數組,您不需要關心它(同樣,默認的復制構造函數和賦值運算符將自動處理正常復制)。
相反,如果您只想在特定條件之后創建數組,則必須使用(智能)指針和動態分配,但恕我直言,這非常麻煩(特別是因為您必須得到正確的“三巨頭” - 復制構造函數,賦值運算符,析構函數); 您可以簡單地使用自動分配分配向量,並使用單獨的標志將數組標記為未初始化,或者只檢查其大小是否為0。
這完全取決於上下文 - 矢量的含義以及您需要它的原因。 它應該在多個對象之間共享嗎? 如果你不知道,不要保留指針,請選擇第二個選項。
std::vector<int> myVector;
如果您有充分理由擁有指針,那么請使用智能指針,為您的情況提供最合適的所有權 - shared_ptr
, scoped_ptr
, unique_ptr
或whatever_ptr
大多數時候,當我們使用標准庫時,我們不需要關心內存分配/釋放 。 模板將自動處理它。 例如。 std :: vector的內存將根據存儲在此向量中的元素增加或減少。 這將是一個例子 。
因此,幾乎你可以在你的情況下以這種方式使用它。
std::vector<int> myVector //your second declaration
if(myCondition)
{
myVector.push(some_int); // use it directly
}
當您創建的Class對象被銷毀時,將使用釋放的向量內存。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.