Re: [問題] 建構物件的問題

看板C_and_CPP作者 (EnonRick)時間8年前 (2017/08/25 12:53), 編輯推噓2(203)
留言5則, 2人參與, 最新討論串2/2 (看更多)
原文刪 ================================== 直接把你的code丟到vs2013 以下不定義 XD copy constructor http://imgur.com/nvetyVK
很明顯在Foo:Foo前就 copy 了一份 XD 最後做 ~XD 含Foo:Foo裡的就會產生兩次 ~XD 但是因為 copy 你的 ptr 會被刪兩次-gg 以下是定義 XD copy constructor http://imgur.com/Vt3c82B
這邊不做 copy 而直接放到 stack 給 Foo:Foo 用 所以只會有一次 Foo:Foo裡的 ~XD 這只是各compiler 的convention 不同,不能說它是bug,實務上來說除非真的有必要 class、struct 應避免使用passed by value 以你的例子來說在 class 有做 new 那更不應做 passed by value ------------------------------- 打完臉也 XD 了 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 125.227.143.169 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1503636807.A.563.html

08/25 15:10, , 1F
好多XD看了好煩XDDD
08/25 15:10, 1F

08/25 17:49, , 2F
其實這就告訴我們 Rule of Three / Rule of Five 的重要性
08/25 17:49, 2F

08/25 17:49, , 3F
zh.wikipedia.org/wiki/%E4%B8%89%E6%B3%95%E5%89%87
08/25 17:49, 3F

08/25 17:53, , 4F
如果有正確實作各種建構子的話就不會有這篇的問題了
08/25 17:53, 4F

08/25 17:54, , 5F
這是不管編譯器有沒有 copy elision 都是一樣
08/25 17:54, 5F
文章代碼(AID): #1Pdwr7LZ (C_and_CPP)
文章代碼(AID): #1Pdwr7LZ (C_and_CPP)