[問題] 建構解構的基本問題

作者: dreamboat66 (小嫩)   2016-04-28 14:43:06
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的位址是不準確的?
謝謝
作者: CaptainH (Cannon)   2016-04-28 18:02:00
從來就沒這回事吧
作者: CoNsTaR ((const *))   2016-04-29 09:51:00
auto 變數的解構順序和建構順序相反內建型別static變數建構/解構時間就是程式開始/結束的時間非POD型別的全域static變數建構時間和內建全域static相同非 POD的 local static 變數第一次用到的時候建構但是全域和 static 變數都不保證建構時間 所以解構時間也無法確定
作者: dreamboat66 (小嫩)   2016-04-30 06:50:00
問題就是 這邊建構順序跟解構順序不一樣啊,不能用stack push pop 想嗎?
作者: CoNsTaR ((const *))   2016-04-30 10:45:00
建構解構順序相反 這是規定
作者: dreamboat66 (小嫩)   2016-04-30 20:18:00
log顯示沒有相反啊 @@
作者: steve1012 (steve)   2016-05-11 08:23:00
有相反啊 只是你先call 了bar 的constructor 才printFoo 被call 才call bar

Links booklink

Contact Us: admin [ a t ] ucptt.com