gpt4 book ai didi

c++ - 删除shallow的复制对象和origin对象

转载 作者:行者123 更新时间:2023-11-28 01:40:52 26 4
gpt4 key购买 nike

我有一个具有以下属性的类 vector :

class Vector
{
private:
int _capacity;
int _size;
int _resizeFactor;
int* _elements;

用这个方法:

Vector::Vector(const Vector& other)
{
this->_size = other._size;
this->_capacity = other._capacity;
this->_resizeFactor = other._resizeFactor;
delete[] this->_elements;
this->_elements = other._elements;
}

和这个析构函数:

Vector::~Vector()
{
if (this->_elements)
delete[] this->_elements;
this->_elements = NULL;
}

声明对象后,向其插入数组并复制它,在程序结束时,出现错误:

1.exe has triggered a breakpoint.

that points to the line:

   delete[] this->_elements;

in the destructor.

我怎样才能取消对其中一个对象的销毁?不改变属性类型

最佳答案

您需要进行深度复制或沿引用计数实现某些操作,并且仅在 Vector 的最后一个实例引用相同数据时才删除 elements被删除。

在你的复制构造函数中你不应该删除任何东西,因为在你调用的地方

delete[] this->_elements;

elements 还没有指向任何东西。分配内存是构造函数的工作(或者如果您确实希望将其指向 other->elements)。

关于c++ - 删除shallow的复制对象和origin对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47238432/

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