1. 程式人生 > >預設拷貝建構函式和預設賦值函式

預設拷貝建構函式和預設賦值函式

當一個類中有動態分配記憶體時,應當自己定義拷貝建構函式和賦值函式

class A
{
	int *p;
public:
	A()
	{
		p = new int[10];
	}
	~A()
	{
		delete p;
	}
};
void f(A x)
{
	cout << "Yes" << endl;
}
int main()
{
	A a;
	f(a);
}

執行時出錯,因為f(a)時呼叫了拷貝建構函式(簡單的複製,p=x.p),當f(a)結束時會呼叫x的解構函式,delete p,而a到了生命週期後也會呼叫解構函式,delete 已經被delete的p; 修改為:

class A
{
	int *p;
public:
	A()
	{
		p = new int[10];
	}
	~A()
	{
		delete p;
	}
	A(A &x)
	{
		p = new int[10];
		*p = *(x.p);
	}
};
void f(A a)
{
	cout << "Yes" << endl;
}
int main()
{
	A a;
	f(a);
}

預設賦值函式同理