作者yhn0tgb60 (呦厚厚)
看板C_and_CPP
標題[問題] void* 的安全轉型?
時間Wed Dec 9 04:02:17 2015
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) xcode
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) box2d
問題(Question):
我收到的資料是 void* 型態 我可以用 static_cast轉成我要的型態
可是 static_cast 不夠安全
如果轉型錯誤了 不會完全NULL 不像 dynamic_cast
我沒辦法判斷 資料的正確與否
請問大家有好方法嗎????
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 218.35.163.53
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1449604939.A.806.html
1F:→ dritchie: void* 本來就沒有安全轉型 12/09 08:10
2F:推 littleshan: 有一些dirty流可以在某種程度內提供解法 12/09 11:47
3F:→ littleshan: 比如說搭配memory pool,你可以檢查位址是否在pool內 12/09 11:48
4F:→ littleshan: 來判斷這個物件是不是用pool產生出來的 12/09 11:48
5F:→ littleshan: 或是在物件的開頭寫入一些特殊標記 12/09 11:49
6F:→ littleshan: 當然,這些都有其限制,不保證能完全解決問題 12/09 11:50
7F:→ Killercat: 其實這比較像是reinterpret_cast的場合 XD 12/10 12:09
8F:→ Killercat: 不過void*算是個特例,compiler不會抱怨 12/10 12:11
9F:→ Killercat: 你用static_cast去轉 12/10 12:11
10F:推 andyjy12: 如果自己的struct,那就在第一個byte 加入type info 12/12 17:28
如果是我自己的.... 我一定不會用 void*.......
※ 編輯: yhn0tgb60 (218.35.163.53), 12/13/2015 00:17:00