[問題] 複製建構子避免 assign 給自己
最近看到了一段程式碼片段,如下:
CForeign::CForeign(const CForeign& Foreign)
{
if (this != &Foreign) // 請問這裡是否恆成立呢?
{
...
}
}
我自己是覺得那個if沒必要,因為一定會成立。
不過,其他三個人都認為那個if是會有不成立的可能性存在的。
我請他們提示我有什麼情況下是不成立的呢? 他們只說了 new 的情況下或許有可能。
但是他們暫時還想不出不成立情形的程式碼就是了。
所以,想請教大家的看法。謝謝唷!
註: 無特別的 operator overloading
※ 編輯: yayax (220.129.233.62), 06/21/2014 09:07:59
→
06/21 09:55, , 1F
06/21 09:55, 1F
→
06/21 10:02, , 2F
06/21 10:02, 2F
→
06/21 10:02, , 3F
06/21 10:02, 3F
→
06/21 10:20, , 4F
06/21 10:20, 4F
感謝兩位回覆,我平常還真的完全沒用到 placement new,實際測試也真的不成立了。
學習了,謝謝。
想再請問一下~
既然這樣,那平常複製建構子是否都應該加上 if (this != &Foreign) 呢?
※ 編輯: yayax (220.129.233.62), 06/21/2014 12:58:21
推
06/21 13:20, , 5F
06/21 13:20, 5F
推
06/21 13:25, , 6F
06/21 13:25, 6F
→
06/21 13:45, , 7F
06/21 13:45, 7F
→
06/21 13:45, , 8F
06/21 13:45, 8F
→
06/21 13:45, , 9F
06/21 13:45, 9F
→
06/21 13:45, , 10F
06/21 13:45, 10F
→
06/21 18:24, , 11F
06/21 18:24, 11F
推
06/21 21:22, , 12F
06/21 21:22, 12F
推
06/22 00:48, , 13F
06/22 00:48, 13F
→
06/22 00:48, , 14F
06/22 00:48, 14F
→
06/22 01:58, , 15F
06/22 01:58, 15F
→
06/22 01:58, , 16F
06/22 01:58, 16F
→
06/22 01:58, , 17F
06/22 01:58, 17F
→
06/22 01:58, , 18F
06/22 01:58, 18F
回QQ29:
placement new 是可以刻意寫得讓他不成立,而不是一定會不成立唷!
基本上寫程式的人不會故意這樣寫啦! 附上 sample code
class CForeign {
public:
CForeign();
CForeign(const CForeign& Foreign);
};
CForeign::CForeign() {}
CForeign::CForeign(const CForeign& Foreign) {
if (this != &Foreign) {
int i = 0;
}
}
int main() {
CForeign* Foreign_A = new CForeign;
CForeign* Foreign_B = new (Foreign_A)CForeign(*Foreign_A);
return 0;
}
※ 編輯: yayax (220.129.233.62), 06/22/2014 12:06:11
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章