1. 程式人生 > >C++11-14 第8講 =default =delete

C++11-14 第8講 =default =delete

default constructor(預設建構函式)空函式

如果自己定義了一個建構函式,編譯器就不會再提供一個預設建構函式。

如果強制加一個=default,會繼續給一個預設建構函式。

引數相同,再要求提供建構函式會報錯。

class P {
public:
	P(int i1,int i2):d1(i1),d2(i2){}
	P(const P& tmp):d1(tmp.d1),d2(tmp.d2){}
	//P(const P&) = delete;//複製構造,delete不要預設建構函式
	//P(const P&) = default;//兩個都是因為已經有了複製建構函式,不能再有預設的
	P(P &&) = default;//搬移構造,default要預設建構函式
	P &operator=(const P&) = default;//拷貝賦值
	P&operator=(const P&&) = delete;//搬移賦值
	virtual ~P(){}
private:
	int d1, d2;
};

struct NoDtor {
	NoDtor() = default;
	//~NoDtor() = delete;//沒有解構函式,後果自負
};