→ a58524andy: 你沒寫copy ctor 01/26 01:46
→ a58524andy: 所以by value之後obj3裡面跟obj會是同個指標 01/26 01:46
→ a58524andy: obj3解構刪一次 obj再刪就double delete了 01/26 01:46
推 ko27tye: 因為你copy constructor是default行為 data pointer是 01/26 01:48
推 HSUFIT: 看起來是因為淺層複製,obj3解構時刪掉obj的data了 01/26 01:49
→ ko27tye: 會是shallow copy 所以call copy function傳進去解構一次 01/26 01:50
→ ko27tye: 離開main又解構一次 01/26 01:51
推 ko27tye: rule of three看一下吧 01/26 01:53
→ ac01965159: 大概了解了,感謝各位 01/26 02:05
→ ac01965159: 不好意思,剛剛發現後來我把程式碼改成不用傳送obje 01/26 22:41
→ ac01965159: ct過去之後,仍然會被解構兩次,想請教為什麼會這樣 01/26 22:41
推 ko27tye: 一樣的問題阿...再去瞭解desturctor何時發生吧 01/26 23:41
→ ac01965159: 剛剛有用debug模式下去跑過,最後會被解構兩次好像是 01/27 01:11
→ ac01965159: 因為obj指向tem 01/27 01:11
→ ac01965159: 但是關於結構的時機,我原本想說是:第一次tem被解構 01/27 01:12
→ ac01965159: 是因為超出生存空間,所以呼叫解建構子,但是第二次 01/27 01:12
→ ac01965159: 解建構就不太理解,debug模式跑出來是在第一次解建構 01/27 01:12
→ ac01965159: 完就立即再解構一次,照理說不是應該執行到最後一行 01/27 01:12
→ ac01965159: 才會呼叫的嗎? 01/27 01:12
→ ac01965159: 我有在新的程式最下面再加一行輸出"abc"來看比較明顯 01/27 01:13
→ ac01965159: ,結果是先解建構兩次才會輸出"abc",所以想問說為什 01/27 01:13
→ ac01965159: 麼不是先解構一次,然後輸出"abc",然後再解構一次呢 01/27 01:13
→ ac01965159: ? 01/27 01:13
推 ko27tye: obj = obj.ret() 這行有個臨時物件 賦值後就解構了 01/27 02:18
→ ko27tye: 覺得你在鬼打牆耶 有瞭解rule of three嗎 01/27 02:20
→ ac01965159: 抱歉我再去重看一下,謝謝 01/27 12:27
→ adrianshum: 去了解一下Rule-of-Three 與 Rule-of-Zero 吧 02/03 09:55