动态数组,指针和复制构造函数的问题

问题描述

创建包含对象的动态数组时遇到很多问题。

据我了解,由于我的数组正在处理对象,因此存储在数组中的类必须具有复制构造函数或赋值运算符,以便可以正确复制所有内容

我已经使用定义的大小的普通数组成功创建了该程序。现在,我在使用动态数组创建相同程序时遇到很多问题。

第1类要存储的对象:

class objToBeStored{
private:
    string dataToBeStored;
    int sizeOfArray;
    string *storedArray;
    
public:
    objToBeStored(); //empty constructor
    objToBeStored& operator =(const objToBeStored& o); // assignment operator
    ~objToBeStored(); //destructor (no code inside);
    bool getData(istream &stream);
    //.....other methods to do stuff
};
    
objToBeStored::objToBeStored(){
    //empty
}

objToBeStored& objToBeStored::operator=(const objToBeStored& o){
    if(this != o){
        dataToBeStored = o.dataToBeStored;
        for (int i = 0; i < sizeOfArray; i++){
            storedArray[i] = o.storedArray[i];
        }
    }
    return *this;
}

void objToBeStored::getData(istream &stream){
    stream >> dataToBeStored >> sizeOfArray;
    storedArray = new string[sizeOfArray];
    for(int i = 0; i < sizeOfArray; i++){
        stream >> storedArray[i];
    }
    return !stream.eof();
}

//.....other methods to do stuff

第2类包含存储上述对象的动态数组。一切正常,除了我声明动态数组的方式以及处理它的函数。因此,我将在下面编写此代码

class storageArrayClass{    
private:
    storageArrayClass *store;
    storageArrayClass *storptr;
    int numberOfstored;
    
public:
    storageArrayClass(); //empty constructor
    ~storageArrayClass();
    void addElm(objToBeStored & o);
    //other functions to do stuff    
};
    
storageArrayClass::storageArrayClass(){ //constructor
    numberOfstored = 0;
}

storageArrayClass::~storageArrayClass(){
}
    
void storageArrayClass(istream &stream) {
    
    objToBeStored o;
    o.getData(stream);
    
    if(numberOfstored == 0){ //check it this is the first element
        store = new objToBeStored[1];   //create a new array with length 1
        store[(numberOfstored] = o; //store object
    }else{
        objToBeStored tmpStore = new objToBeStored[(numberOfstored+1];  //create a temp. array with 1 more position
        for(int i=0; i < numberOfstored; i++){
            tmpStore[i] = store[i]; //copy original array to the temp. array
            storptr = &tmpStore[i]; // increment a point
        }
        
        storptr++; //increment pointer to last position
        *storptr = o; //store object in last position
        
        delete[] store; //delete the original array
        store = new objToBeStored[(numberOfstored+1]; //create a new original array
        store = tmpStore;//copy temp. array
    }
}

在出现以下错误之前,我设法向动态数组添加了3个对象:

进程返回的-1073741819(0xC0000005)执行时间:5.059 s

请帮助。我在这里读了无数线程,但是我无法使其正常工作。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)