【发布时间】:2021-11-24 13:12:55
【问题描述】:
我目前正在学习 C++ 的基础知识,并且遇到了以下类数组的问题。
class Arrayclass {
private:
int arraySize;
float array[];
public:
Arrayclass(int arraySize) {
float * array = new float[arraySize]();
}
~Arrayclass() {
delete[] array;
}
}
据我所知,在构造函数中初始化的数组实际上并不对应于新类中的存储数组,因此当我在我的主类中初始化一个新类时,创建的数组持有0 值。我很抱歉我的解释不清楚,只是想了解构造函数中初始化的数组与我私有的数组之间的关系。
【问题讨论】:
-
你在构造函数中声明了一个局部变量
array,它与数据成员array无关。只需将array = new float[arraySize]();放入构造函数中即可。 -
构造函数定义了一个名为
array的新变量,它与名为array的类成员没有任何关系,并且在构造函数返回时不再存在,这无济于事。相反,在构造函数初始化列表(不在构造函数主体中)中初始化array成员,即ArrayClass(int arraySize) : array(new float[arraySize] {};。此外,管理资源的类(如动态分配的数组,在您的情况下)通常需要手动实现复制构造函数、复制赋值和析构函数。查找“三规则”以获取相关信息。 -
float array[];在标准 C++ 中是不允许的。也许你的意思是float * array;,但你应该使用std::vector<float> array;