c++ - 深拷贝int数组c++

标签 c++ arrays memory-leaks deep-copy

我想深拷贝一个int数组。当它通过析构函数时,我得到一个断言错误:_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)。我被告知是因为它试图删除不存在的东西。请让我知道我是否在正确的轨道上并且只需要改变一些小的东西,或者如果我完全迷失并且不知道它。如果需要,我可以添加更多代码。

感谢您的回答。

.h

private:
    int* _myArray;
    int _size;
    int _capacity;

.cpp

MyVector::MyVector()
{
_myArray = new int[2];
_size = 0;
_capacity = 2;
}

MyVector::MyVector(int aSize)
{
_myArray = new int[aSize];
_size = 0;
_capacity = aSize;
}

 MyVector::~MyVector()
 {
if(_myArray != NULL)
{
    delete[] _myArray;
    _myArray = NULL;
}
 }
MyVector::MyVector(const MyVector& mVector)
{
_capacity = mVector._capacity;
_size = mVector._size;

//  if(mVector._myArray)
//  {
//  _myArray = new int[_capacity];

//  copy(mVector._myArray, mVector._myArray+_capacity, _myArray);
//  }
}

  MyVector& MyVector::operator=(MyVector& setterVect)
{
delete [] _myArray;

if(setterVect._myArray)
{
    _myArray = new int[_capacity];

    copy(setterVect._myArray, setterVect._myArray+_capacity, _myArray);
}

return *this;
}

最佳答案

您需要确保您遵循 "Rule of Three"

除了复制构造函数和析构函数之外,您还应该提供一个复制赋值运算符,它应该对动态分配的指针成员进行深度复制。

附带说明一下,最好的解决方案是简单地删除动态分配的成员并使用 std::vector它为您省去了手动内存管理的所有麻烦。

关于c++ - 深拷贝int数组c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13813582/

相关文章:

c++ - 指向成员的指针选择

c - 如何获取用户在 './a.out'之后任意顺序输入的命令行参数整数的GCD?

c++ - 使用映射的迭代器混淆

c++ - 通过变量使用对象和对象函数

c - "array/pointer equivalence"的现代术语是什么?

javascript - 在javascript中从平面数组构建树数组

php - 在 PHP 中使用静态方法和属性会占用更少的内存吗?

c++ - Tensorflow C++ 内存泄漏 - Valgrind

.net - System.OutOfMemoryException异常

C++ 调试断言失败的字符串数组