C++類構造優化 - 不調用拷貝構造函數
假如有下面這樣一個類:
class A{
public:
A(int p, char q):x(p), c(q){ cout << "constructor called" << endl; }
A(const A& a){x = a.x; c = a.c; cout << "copy constructor called" << endl;}
~A(){cout << "destructor called" << endl;}
private:
int x;
char c;
};
如果按照下面的語句生成對象a:
A a = A(1,'a');
按照預想會先調用自定義構造函數生成臨時對象,而後調用拷貝構造函數,最後會發生兩次析構。
但是,實際上上述代碼經優化後只調用構造函數A(int,char),並不調用拷貝函數,而且只發生一次析構。
即A a = A(1,'a');與A a(1,'a');是等價的。
《C++ 設計新思維》 下載見 http://www.linuxidc.com/Linux/2014-07/104850.htm
C++ Primer Plus 第6版 中文版 清晰有書簽PDF+源代碼 http://www.linuxidc.com/Linux/2014-05/101227.htm
讀C++ Primer 之構造函數陷阱 http://www.linuxidc.com/Linux/2011-08/40176.htm
讀C++ Primer 之智能指針 http://www.linuxidc.com/Linux/2011-08/40177.htm
讀C++ Primer 之句柄類 http://www.linuxidc.com/Linux/2011-08/40175.htm
將C語言梳理一下,分布在以下10個章節中: