【问题标题】:Array declaration, size definition, and destruction in c++C++中的数组声明、大小定义和销毁
【发布时间】:2013-10-26 06:02:18
【问题描述】:

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

在 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;
}

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

析构函数正确吗?

【问题讨论】:

  • 那不是数组,是指针。

标签: c++ arrays class constructor


【解决方案1】:

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

【讨论】:

  • 你能解释一下倒数第二行发生了什么吗?那句话someClass::someClass(int range) : array(range)
  • @Rstevoa 它正在调用std::vector 的大小设置构造函数。详情请见this question
【解决方案2】:

您还应该添加复制 ctor 和复制赋值运算符。记住rule of three

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多