看板 C_and_CPP 關於我們 聯絡資訊
在網路上看到有人在問 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