gpt4 book ai didi

c++ - 复制构造函数、深拷贝以及如何正确编写

转载 作者:行者123 更新时间:2023-11-30 02:25:43 31 4
gpt4 key购买 nike

我需要帮助,我不太了解如何注册我的复制构造函数以执行深层复制。

我的问题是我的复制构造函数是否正确注册,如果没有,我该如何记录下来,非常感谢。

我的 ArrayList.h:

template<class T> 
class ArrayList{
private:
T* storage;// T pointer array
int size;// size of array

public:
ArrayList();//constructor
ArrayList(const &ArrayList);//copy constructor
};

template<class T>//constructor
ArrayList<T>::ArrayList(){
size = 0;// size of array in start
}//end ArrayList

template<class T>//copy constructor
ArrayList<T>::ArrayList(const &ArrayList){
T* _storage = T* storage;
int _size = size;
}

template<class T>//destructor
ArrayList<T>::~ArrayList(){
delete[]storage;
}//end ~ArrayList

谢谢

最佳答案

不,这是不正确的。现在你正在执行一个浅拷贝,即只复制指针(这是默认复制构造函数无论如何都会做的),所以当拷贝和原始文件超出范围时,你将得到 2 个试图释放的析构函数相同的内存和砰!

你需要在复制构造函数中分配内存,复制元素,然后改变指针指向新分配的内存,像

template<class T>//copy constructor
ArrayList<T>::ArrayList(const ArrayList&){
T* copy_storage = new T[size];

for(std::size_t i = 0; i < size; ++i)
copy_storage[i] = storage[i];

storage = copy_storage;
}

我假设这是一个练习。如果没有,只需使用 std::vector<T>相反,一切都会自动处理。

关于c++ - 复制构造函数、深拷贝以及如何正确编写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43834717/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com