【发布时间】:2023-03-26 06:15:01
【问题描述】:
我有一个类vector210,我正在尝试创建一个复制构造函数,如下面的示例代码中所述(仅完整代码的一部分)。
class vector210 {
public:
int arraySize;
int values[1];
vector210(int array[], int arraySize_){
arraySize = arraySize_;
for(int i = 0;i !=arraySize_;i++){
values[i] = array[i];
}
}
vector210(const vector210 &p){
int values [p.arraySize];
for(int i=0;i<p.arraySize;i++){
values[i] = p.values[i];
};
arraySize = p.arraySize;
};
void print(){
for(int i =0;i <arraySize;i++){
cout << values[i] << endl;
}
if (arraySize ==0){
cout << "Vector is empty." << endl;
}
};
当我在main 中运行代码时:
#include "CST210vector.h"
#include <iostream>
using namespace std;
int main() {
int v[5] = {1,2,3,4,5} ;
vector210 test(v, sizeof(v)/sizeof(*v));
cout << "Array to copy " << endl;
test.print();
cout << "Copied array values:"<< endl;
vector210 testnew = test;
testnew.print();
cout << " " << endl;
cout << testnew.size() << endl;
}
我接收到终端的输出:
Array to copy
1
2
3
4
5
Copied array values:
5
4198189
0
1
2
因此,在调用复制构造函数时构造的数组似乎与旧版本的 vector210 对象中的数组大不相同,但我不确定这是如何发生的。有没有人知道这个错误是如何发生的?我希望我的复制构造函数生成原始数组的精确副本。
【问题讨论】:
-
为什么是
values[1]?你的向量应该只包含一个元素吗? -
您有一个包含 1 个元素的数组。是什么让你认为你可以为它分配任意数量的元素?
-
刚开始学c++,是不是:int values[]更好?
-
在您的复制构造函数中,
int values [p.arraySize];不会调整values成员变量的大小,它声明了新的局部变量来隐藏成员变量。 -
如果您刚刚开始,请使用
std::vector而不是重新发明它。如果您将其作为练习进行,并且尚未涉及动态内存分配,那么您还没有准备好实现它。
标签: c++ arrays copy-constructor