簡體   English   中英

矢量作為班級成員

[英]Vector as a class member

你好我有這個問題:我想有一個矢量作為類成員。 這對我來說可能更容易,我為此道歉。

  • 我該如何申報這個載體? 這是對的嗎? std::vector<int> *myVector; 或者std::vector<int> myVector
  • 我該如何在dealloc中處理這個向量?
  • 如何將數組初始化為if?

這個對嗎?

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_ptrscoped_ptrunique_ptrwhatever_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.

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