2011-12-18 144 views
3

你好,我有這樣的疑問: 我想有一個向量作爲類成員。這也許是我的問題 對你更容易,我對此表示歉意。向量作爲類成員

  • 我應該如何申報載體?這是正確的嗎? std::vector<int> *myVector;std::vector<int> myVector
  • 我應該如何處理在的dealloc這個載體?
  • 我怎樣才能數組初始化成若?

這是正確的嗎?

if(myCondition) 
{ 
    if(!myVector) //is this correct? 
     myVector = new std::vector<int>(); //is this correct? on this i have a error 
} 

回答

7

你肯定希望使用std::vector<int> myVector。無需初始化它,因爲它會在您的類的構造函數中自動初始化,並在您的類被銷燬時釋放。

6

只需使用自動分配:它聲明爲這樣的成員:

class YourClass 
{ 
    std::vector<int> myVector; 
    // ... 
}; 

任何構造函數的運行,當你的對象被釋放時自動銷燬前陣被自動構造,你不需要關心它(另外,默認的拷貝構造函數和賦值操作符會自動優雅地處理拷貝)。如果你只想在特定的條件之後創建數組,你必須求助於(智能)指針和動態分配,但是恕我直言,這很麻煩(尤其是因爲你必須得到正確的「大三「 - 複製構造函數,賦值運算符,析構函數);你可以不是簡單地分配與自動分配載體和使用一個單獨的標誌來標記你的數組沒有初始化,或只是檢查其大小爲0。

0

這完全取決於語境 - 什麼樣的載體手段,以及爲什麼需要它。它應該在多個對象之間共享嗎?如果你不知道,不要留一個指針,去你的第二個選項。

std::vector<int> myVector; 

如果你有充分的理由有一個指針,那麼請使用智能指針,提供最適合的所有權您的具體情況之一 - shared_ptrscoped_ptrunique_ptrwhatever_ptr

0

大多數情況下,當我們使用標準庫時,我們不需要關心內存分配/釋放。該模板將自動處理它。例如。 std :: vector的內存將根據此向量中存儲的元素增加或減少。這將是一個example

因此,幾乎你可以在你的情況下以這種方式使用它。

std::vector<int> myVector //your second declaration 
if(myCondition) 
{ 
    myVector.push(some_int); // use it directly 
} 

當您創建的Class對象被銷燬時,所使用的向量的內存將被釋放。

相關問題