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

作者: enonrick (EnonRick)   2017-08-25 12:53:25
原文刪
==================================
直接把你的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
作者: james732 (好人超)   2017-08-25 15:10:00
好多XD看了好煩XDDD
作者: LPH66 (-6.2598534e+18f)   2017-08-25 17:49:00
其實這就告訴我們 Rule of Three / Rule of Five 的重要性zh.wikipedia.org/wiki/%E4%B8%89%E6%B3%95%E5%89%87如果有正確實作各種建構子的話就不會有這篇的問題了這是不管編譯器有沒有 copy elision 都是一樣

Links booklink

Contact Us: admin [ a t ] ucptt.com