楼主:
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