作者CPlusPluslx (C++1X)
看板C_and_CPP
標題[問題] reinterpret_cast 使用時機
時間Tue Jan 5 18:34:19 2010
在網路上看到有人在問 shallow copy問題時
他的程式碼大概如下
class C {
public:
C* shallow_clone() {
C* p = reinterpret_cast<C>(new char[sizeof(C)]);
.
.
.
return p;
}
};
後來有人建議他的程式改成
class C {
public:
C* shallow_clone() {
// C* p = reinterpret_cast<C>(new char[sizeof(C)]);
// Avoidable undefined behavior: instance of C exists in a potentially
// not remotely valid state.
char* p = new char[sizeof(C)];
.
.
.
// return p;
return reinterpret_cast<C*>(p);
}
};
我想請問為什麼 reinterpret_cast要改到後面?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.137.16.60
推 CrimsonLunar:應該沒一定要 只是reinterpret_cast<這裡要C*> 01/05 18:44
推 CrimsonLunar:話說這種方法很危險...要考慮到細節像是vptr之類的.. 01/05 18:52
→ CrimsonLunar:我覺得用一個private/protected的ctor比較好... 01/05 18:53
→ uest:C* p = reinterpret_cast<C>(new char[sizeof(C)]); Typo? 01/05 23:14
→ uest:看到一樓的推文了 XD 01/05 23:17