Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 深度复制int数组c++;_C++_Arrays_Memory Leaks_Deep Copy - Fatal编程技术网

C++ 深度复制int数组c++;

C++ 深度复制int数组c++;,c++,arrays,memory-leaks,deep-copy,C++,Arrays,Memory Leaks,Deep Copy,我想深度复制一个int数组。我得到一个断言错误:_BLOCK_TYPE_在通过析构函数时是有效的(pHead->nBlockUse)。我被告知这是因为它试图删除一些不存在的东西。请让我知道我是否在正确的轨道上,只是需要改变一些小东西,或者如果我完全迷路了,不知道。如果需要,我可以添加更多代码 谢谢你的回答 h .cpp 您需要确保遵循 除了复制构造函数和析构函数之外,您还应该提供一个复制赋值操作符,它应该对动态分配的指针成员进行深度复制 另一方面,最好的解决方案是简单地删除动态分配的成员并使用s

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

谢谢你的回答

h

.cpp


您需要确保遵循

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


另一方面,最好的解决方案是简单地删除动态分配的成员并使用
std::vector
,这样可以省去手动内存管理的所有麻烦。

您需要确保遵循

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


另一方面,最好的解决方案是简单地删除动态分配的成员并使用
std::vector
,这样可以省去手动内存管理的所有麻烦。

您是否在默认构造函数中将
\u myArray
初始化为
NULL
?不,我只是从构造函数中添加了代码。我将其设置为2。不久前,我写了一篇关于动态数组的文章,你可能会觉得有趣。你是否在默认构造函数中将
\u myArray
初始化为
NULL
?不,我只是从构造函数中添加了代码。我把它设置为2。不久前我写了一篇关于动态数组的文章,你可能会觉得有趣。好的,是的,我意识到只使用std::vector会更好。我只是想学习C++中内存分配和指针等的概念。何时调用赋值操作符,何时调用复制构造函数?我刚刚添加了一个赋值运算符。这就是我应该用它做的吗?这里有一个很好的解释,当调用赋值运算符和复制构造函数时。好的,是的,我意识到只使用std::vector会更好。我只是想学习C++中内存分配和指针等的概念。何时调用赋值操作符,何时调用复制构造函数?我刚刚添加了一个赋值运算符。这就是我应该用它做的吗?这里有一个很好的解释,当赋值运算符和复制构造函数被调用时。
private:
    int* _myArray;
    int _size;
    int _capacity;
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;
}