Re: [問題] 關於建構子/解構子的呼叫

看板C_and_CPP (C/C++)作者 (mat)時間15年前 (2011/01/10 23:15), 編輯推噓2(200)
留言2則, 2人參與, 最新討論串2/2 (看更多)
我上一篇推文搞錯了 真是抱歉 弄清楚來回答原PO orz ※ 引述《jay060191 (小J)》之銘言: : #include <iostream> : using std::cerr; : using std::endl; : class X { : public: : X() { cerr << "X()" << endl; } : ~X() { cerr << "~X()" << endl; } : }; : class Y { : public: : Y() { cerr << "Y()" << endl; } : ~Y() { cerr << "~Y()" << endl; } : }; : int main(){ : X a; : Y b(); 我搞混的地方是這裡 函數分成宣告跟定義 Y b(); //這是函數宣告 Y b(){ ... } //有寫實作內容的叫做定義 main裡頭不能有函數定義,但是可以有函數宣告式。 所以這兒compiler把這行 Y b(); 當成一個名字叫做b() 回傳值是Y的function宣告 所以呼叫沒有參數的建構函數 要這樣寫 Y b; //不能加括號 這樣寫就出問題了 Y b(); 吊詭的是如果建構子有參數 Y b(5); Y b("par"); 這樣就會觸發正確的建構函數 因為compiler可以正確判斷這不是函數宣告,不會混淆。 我這樣理解應該沒錯吧orz : } : 以main內的程式來講 : 我知道宣告class時會呼叫建構子,刪除後會呼叫解構子 : 但是實際上跑以上程式的結果 : X會呼叫建構子與解構子沒錯 : 但是Y卻不會 : 這是為什麼? : 然後Y b();是什麼意思? : 謝謝 -- Mat's Blog - UVa Problems I Soved http://chchwy.blogspot.com/p/my-solved-acm-problems-list.html -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.45.103.203 ※ 編輯: chchwy 來自: 114.45.103.203 (01/10 23:20)

01/11 00:43, , 1F
謝謝c大..我懂了XD
01/11 00:43, 1F

01/11 02:29, , 2F
哦哦XD 所以建立區域變數時就直接呼叫了Default建構式囉
01/11 02:29, 2F
文章代碼(AID): #1DAo9vxk (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1DAo9vxk (C_and_CPP)