我想交換內部的一個對象。它的工作原理,但當我添加一個析構函數時,它給了我一個雙重的免費錯誤。有沒有辦法來防止這種情況?我說的方法是void swap(SimpleArray &object)
。交換一個對象本身內部
(很抱歉,如果你讀這之前,我曾在我的崗位錯誤信息...)
#include "TestType.h"
class SimpleArray {
private:
TestType* pArray;
//TestType* temp;
public:
SimpleArray(TestType *array)
{
this->pArray = array;
}
~SimpleArray() { delete[] pArray; }
SimpleArray() { pArray = 0;}
SimpleArray(const SimpleArray& arg){ pArray = arg.pArray; }
~SimpleArray() { delete[] pArray; }
TestType * get() const{ return pArray; }
bool isNonNull() const { return pArray != 0; }
//TestType* pArray;
void reset(TestType*& p) {this->pArray = p; }
void reset() { pArray = 0; }
void swap(SimpleArray &object) { SimpleArray temp; temp = object; object = *this; *this = temp;}
TestType * release() { pArray = 0; return pArray; }
TestType& getReference(int a) { return *pArray; }
};
這工作,但一旦我添加了析構它給了我一個「雙免費或損壞錯誤」。我該如何解決這個問題?這裏主要介紹它的功能。
bool testGetReleaseSwap() {
SimpleArray array1;
if (array1.get() != 0)
return false;
TestType* directArray1 = new TestType[100];
array1.reset(directArray1);
if (array1.get() != directArray1)
return false;
TestType* directArray2 = new TestType[50];
SimpleArray array2(directArray2);
array1.swap(array2);
if (array1.get() != directArray2 || array2.get() != directArray1)
return false;
array2.swap(array1);
if (array1.get() != directArray1 || array2.get() != directArray2)
return false;
array1.swap(array1);
if (array1.get() != directArray1)
return false;
if (array1.release() != directArray1 || array2.release() != directArray2)
return false;
if (array1.get() != 0 || array2.get() != 0)
return false;
delete[] directArray1;
delete[] directArray2;
return true;
}
的可能重複【什麼是三個規則?(http://stackoverflow.com/questions/4172722/what-is-the-rule-of-three)你丟失的拷貝賦值運算符,而你的拷貝構造函數做一個淺拷貝,讓兩個對象擁有相同的數組。 –
感謝幫助。修復了這個問題。 – avoliva