C++ 中的数组声明、大小定义和销毁

Array declaration, size definition, and destruction in c++

本文关键字:定义 数组 声明 C++      更新时间:2023-10-16

所以我不确定这样做的正确方法是什么。我有一个名为 someClass 的类,其中包含一个整数数组的私有变量。在调用构造函数之前,不会定义大小。这是我的做法:

在某类中:

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

在某些类中.cpp:

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

我是否正确声明/定义了数组?使用向量会好得多吗?

析构函数是否正确?

是的,您做得正确(部分),是的,最好使用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)
{}

您还应该添加复制 ctor 和复制赋值运算符。记住三法则!