如何解决如何正确复制到已经初始化的对象变量
#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 举报,一经查实,本站将立刻删除。