Posted on 2008-10-07 15:09
沒畫完的畫 閱讀(1490)
評論(5) 編輯 收藏 引用 所屬分類:
C++
摘自網(wǎng)上BLOG
原文URL:
http://www.cnblogs.com/chio/archive/2007/10/20/931043.html
http://blog.csdn.net/leatinfy/archive/2008/03/17/2192409.aspx
http://www.shnenglu.com/Leon916/archive/2008/10/06/63320.aspx
代碼:
我以為輸出會是 0 No, 在 winxp + vc 和 RedHat + G++ 環(huán)境下
輸出的值都為一個
未初始化的值
修改代碼如下
在 winxp + vc6 環(huán)境輸出如下:
this - 1245052
this - 1244960
-858993460
在 RedHat + G++ 環(huán)境下輸出如下:
this - 1073756940
this - 1073756972
134514604
this 指針的值居然不同,這樣意味著
CLS(0);
產(chǎn)生的是一個臨時對象,并非調(diào)用了 CLS() 函數(shù)?。。。?br>
CLS(0);
這一句其實(shí)有歧義(兩種意思)
1. 調(diào)用 CLS(int i) 函數(shù)
2. 產(chǎn)生一個臨時對象
編譯器選擇了后者
如果想調(diào)用回 CLS(int i) ,莫非沒辦法?
聰明的網(wǎng)友們居然想到用 new ~~~~
new (this)CLS(0);
new 會做兩件事
1. 分配內(nèi)存
2. 調(diào)用構(gòu)造函數(shù)
加上了 this
inline void *__cdecl operator new(size_t, void *_P)
{
return (_P);
}
告訴 new “您在指定的內(nèi)存(this)上分配對象吧”
我總覺得這種為取巧方法
以上的問題,寫成一個帶有默認(rèn)值的構(gòu)造函數(shù)就行了, Simple~ Make it Simple~
CLS::CLS(int i = 0)
{
}
在應(yīng)用中應(yīng)當(dāng)避免 構(gòu)造函數(shù)里 調(diào)用 另一個構(gòu)造函數(shù) 的情況