2013-10-17 34 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