2013-10-17 58 views
2

所以我不確定正確的方法是做什麼。我有一個名爲someClass的類,具有一個整數數組的私有變量。在調用構造函數之前,大小不會被定義。下面是我如何做到這一點:C++中的數組聲明,大小定義和破壞

在someClass.h:

class someClass { 
public: 
    someClass(); 
    someClass(int size); 
    ~someClass(); 
private: 
    int* array; 
} 

在someClass.cpp:

someClass::someClass() { 
    array = new int[9]; 
} 

someClass::someClass(int range) { 
    array = new int[range]; 
} 

someClass::~someClass() { 
    delete[] array; 
} 

難道我宣佈/正確定義數組?使用矢量會更好嗎?

析構函數是否正確?

+0

這不是一個數組,它是一個指針。 – chris

回答

2

是的,你正在做正確的(部分),是的,最好使用std::vector(因爲「部分」部分)。 「部分」是現在你將不得不爲你的類提供一個拷貝構造函數和拷貝賦值操作符(爲了提高效率,你可能還需要一個移動構造函數和移動賦值操作符);如果你不這樣做,如果你複製課程,你會得到兩個刪除錯誤。

std::vector封裝了所有這些,所以這就是爲什麼你應該更喜歡它。更何況它有像迭代器一樣的好功能。然後

你的類是這樣的:

class someClass { 
public: 
    someClass(); 
    someClass(int size); 
    //no destructor necessary! 
private: 
    std::vector<int> array; 
} 
someClass::someClass() 
{} // nothing special needed 

someClass::someClass(int range) : array(range) 
{} 
+0

你能解釋一下倒數第二行嗎?一個說'someClass :: someClass(int range):array(range)'? – Rstevoa

+0

@Rstevoa它調用'std :: vector'的大小設置構造函數。有關詳細信息,請參見[此問題](http://stackoverflow.com/q/1711990/1782465)。 – Angew