作者enonrick (EnonRick)
看板C_and_CPP
标题Re: [问题] 建构物件的问题
时间Fri Aug 25 12:53:25 2017
原文删
==================================
直接把你的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://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1503636807.A.563.html
1F:推 james732: 好多XD看了好烦XDDD 08/25 15:10
2F:推 LPH66: 其实这就告诉我们 Rule of Three / Rule of Five 的重要性 08/25 17:49
3F:→ LPH66: zh.wikipedia.org/wiki/%E4%B8%89%E6%B3%95%E5%89%87 08/25 17:49
4F:→ LPH66: 如果有正确实作各种建构子的话就不会有这篇的问题了 08/25 17:53
5F:→ LPH66: 这是不管编译器有没有 copy elision 都是一样 08/25 17:54