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