复制构造函数生成旧数组的错误副本

时间:2018-03-06 06:39:39

标签: c++ arrays copy-constructor

我有一个类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对象中的数组完全不同,但我不确定这是怎么回事。有没有人能够了解这个错误是如何发生的?我希望我的复制构造函数能够生成原始数组的精确副本。

2 个答案:

答案 0 :(得分:1)

你的方法错了(ISNULL([SaleProduct]) && ISNULL([ReProduct])) ? " " : (!ISNULL([SaleProduct]) && ISNULL([ReProduct])) ? [SaleProduct] : (ISNULL([SaleProduct]) && !ISNULL([ReProduct])) ? [SaleProduct] : ([SaleProduct]+";"+[ReProduct]) 应该是一个指针,你应该为它分配内存。 C ++没有动态数组。您的类和构造函数应该如下所示

vector210::values

现在你的拷贝构造函数应该类似,它使用new分配内存。

答案 1 :(得分:0)

您使用的是dinamic数组。编译器应该抱怨它

我建议使用指针作为int a []成为int * a,以下对我来说工作正常

class vector210 {
    public:
    int arraySize;
    int *values;

vector210(const vector210 &p){
    values = new int[p.arraySize];
    memcpy ( values , p.values, p.arraySize*sizeof(int) );
    p.values[1] = 0;
    arraySize = p.arraySize;
}