作者dreamboat66 (小嫩)
看板C_and_CPP
標題[問題] 建構解構的基本問題
時間Thu Apr 28 14:43:06 2016
https://ideone.com/9ufeMX
請問上述的程式碼
我不確定1和2 真正被push到stack上
bar和foo誰先被push(我觀念上1和2都是 foo先 再來是bar)
而我從印出this似乎1,2兩個push到stack的順序也是一樣(但不知道為啥最佳化後 stack
address是小到大)
=============以上 不知道結論有沒有錯============
但以我的觀念, 我是覺得先被push就是最後被解構
但用stack的觀念上我無法解釋 為什麼解構順序會有差別?
如果從code來看, 確實是很合理 但不知道為什麼stack就說不通?
中間有什麼盲點我搞錯了? 或是因為一些手段 導致我光看this的位址是不準確的?
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.163.10.190
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1461825790.A.6BB.html
1F:推 CaptainH: 從來就沒這回事吧 04/28 18:02
2F:推 CoNsTaR: auto 變數的解構順序和建構順序相反 04/29 09:51
3F:→ CoNsTaR: 內建型別static變數建構/解構時間就是程式開始/結束的時 04/29 09:52
4F:→ CoNsTaR: 間 04/29 09:52
5F:→ CoNsTaR: 非POD型別的全域static變數建構時間和內建全域static相同 04/29 09:54
6F:→ CoNsTaR: 非 POD的 local static 變數第一次用到的時候建構 04/29 09:54
7F:→ CoNsTaR: 但是全域和 static 變數都不保證建構時間 所以解構時間也 04/29 10:04
8F:→ CoNsTaR: 無法確定 04/29 10:04
9F:→ dreamboat66: 問題就是 這邊建構順序跟解構順序不一樣啊,不能用st 04/30 06:50
10F:→ dreamboat66: ack push pop 想嗎? 04/30 06:50
11F:推 CoNsTaR: 建構解構順序相反 這是規定 04/30 10:45
12F:→ dreamboat66: log顯示沒有相反啊 @@ 04/30 20:18
13F:推 steve1012: 有相反啊 只是你先call 了bar 的constructor 才print 05/11 08:23
14F:→ steve1012: Foo 被call 才call bar 05/11 08:23