问题描述
#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 (将#修改为@)