天天看點

合成拷貝構造函數與拷貝構造函數初始化

// copyconstructor.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

class A
{
public:
	A(){}
	~A(){}
	int v;
};

class B
{
public:
	B(){}
	
	//B(B &b) : a(b.a) {}	// 合成拷貝構造函數對應的拷貝構造函數 I
	
	//B(B &b)
	//{
	//	a = b.a;			// 合成拷貝構造函數對應的拷貝構造函數 II
	//}
	
	~B(){}
	
	A a;
};

int _tmain(int argc, _TCHAR* argv[])
{
	B b;
	b.a.v = 1;
	B b0 = b;// 調用合成拷貝構造函數
	return 0;
}

// 注意:

// 1. 合成拷貝構造函數是預設的拷貝構造函數。

// 2. 合成拷貝構造函數就等同于對所有成員變量進行一次指派操作。

// 3. 是以如果成員的預設的指派操作不能滿足需求(如是一個連結清單或含有指針),
就必須要對成員類定義重載指派操作符,才能夠讓合成拷貝構造函數起作用。

// 4. 通常對于基礎類,都最好需要實作構造函數、拷貝構造函數、析構函數
以及(注意)重載指派操作符。
           

繼續閱讀