如何正确复制到已经初始化的对象变量

问题描述

#include <iostream>

class MyArray {
    public:
        MyArray(int* array,int size) {
            this->size = size;
            this->array = new int[size];
            for(int i = 0; i < size; i++) {
                this->array[i] = array[i];
            }
        }
        MyArray(const MyArray& myArray) {
            std::cout << "copying: ";
            myArray.print();
            std::cout << std::endl;
            size = myArray.size;
            this->array = new int[size];
            for(int i = 0; i < size; i++) {
                array[i] = myArray.array[i];
            }
        }
        ~MyArray() {
            std::cout << "destroying: ";
            print();
            std::cout << std::endl;
            delete []array;
        }
        const void print() const{
            for(int i = 0; i < size; i++) {
                std::cout << array[i];
            }
        }
        int* array;
        int size;
};

int main() {
    int array1[4] = {1,2,3,4};
    int array2[4] = {2,4,5};
    MyArray myArray1(array1,4);
    MyArray myArray2(array2,4);
    MyArray myArray3 = myArray1;
    myArray1 = myArray2;
}

在上面的示例中,我可以将一个对象复制到一个新变量 myArray3 中,并且复制构造函数会按原样打印“copying: 1234”。当我将 myArray2 复制到先前初始化的 myArray1 中时,复制构造函数不会打印(可能是由于某种 Copy Elision)。当变量超出范围后调用析构函数时,我会因两次删除同一变量而收到 malloc 错误。有没有一种干净的方法来复制已经初始化的对象变量 (myArray1 = myArray2) 而不会遇到析构函数的这个问题?

解决方法

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

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

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