[問題] 複製建構子避免 assign 給自己

作者: yayax (夜夜叉)   2014-06-21 09:04:21
最近看到了一段程式碼片段,如下:
CForeign::CForeign(const CForeign& Foreign)
{
if (this != &Foreign) // 請問這裡是否恆成立呢?
{
...
}
}
我自己是覺得那個if沒必要,因為一定會成立。
不過,其他三個人都認為那個if是會有不成立的可能性存在的。
我請他們提示我有什麼情況下是不成立的呢? 他們只說了 new 的情況下或許有可能。
但是他們暫時還想不出不成立情形的程式碼就是了。
所以,想請教大家的看法。謝謝唷!
註: 無特別的 operator overloading
※ 編輯: yayax (220.129.233.62), 06/21/2014 09:07:59
作者: ggBird (ggBird)   2014-06-21 09:55:00
自己assign自己就不成立了呀
作者: loveme00835 (髮箍)   2014-06-21 10:02:00
placement newto 1樓: 這是建構子
作者: ggBird (ggBird)   2014-06-21 10:20:00
sorry沒看清楚
作者: kwpn (ITSST)   2014-06-21 13:20:00
建構歸建構, 跟assign一點關係也沒有, 根本不需要check物件正在建構表示物件還不存在, 所以Foreign不可能是self
作者: loveme00835 (髮箍)   2014-06-21 13:45:00
至少我知道 copy assignment 裡可以先拿參數去建構 local 物件,再用 this->swap(local) 得到資源來免去檢查,建構子的部分就看你 doc 怎麼寫囉,只要讓使用者不亂用就好。
作者: yayax (夜夜叉)   2014-06-21 18:24:00
感謝~ 我更確定自己的理解了
作者: jackylu63 (J)   2014-06-21 21:22:00
學到新東西了
作者: QQ29 (我愛阿蓉)   2014-06-22 00:48:00
若placement new這if 又不成立,邏輯上會錯吧?兩instance sasame this ptr?
作者: loveme00835 (髮箍)   2014-06-22 01:58:00
邏輯上?參數是 reference 而不是另一個物件,所以參考回 this 我覺得蠻合理的。你可以當它存在,而且狀態不變,即使它其實未初始化過。只是這種情況下就看原po怎麼定義 copy ctor 完成之後 this 的狀態了。

Links booklink

Contact Us: admin [ a t ] ucptt.com