[問題] void* 的安全轉型?

看板C_and_CPP作者 (呦厚厚)時間8年前 (2015/12/09 04:02), 8年前編輯推噓2(208)
留言10則, 4人參與, 最新討論串1/1
開發平台(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://www.ptt.cc/bbs/C_and_CPP/M.1449604939.A.806.html

12/09 08:10, , 1F
void* 本來就沒有安全轉型
12/09 08:10, 1F

12/09 11:47, , 2F
有一些dirty流可以在某種程度內提供解法
12/09 11:47, 2F

12/09 11:48, , 3F
比如說搭配memory pool,你可以檢查位址是否在pool內
12/09 11:48, 3F

12/09 11:48, , 4F
來判斷這個物件是不是用pool產生出來的
12/09 11:48, 4F

12/09 11:49, , 5F
或是在物件的開頭寫入一些特殊標記
12/09 11:49, 5F

12/09 11:50, , 6F
當然,這些都有其限制,不保證能完全解決問題
12/09 11:50, 6F

12/10 12:09, , 7F
其實這比較像是reinterpret_cast的場合 XD
12/10 12:09, 7F

12/10 12:11, , 8F
不過void*算是個特例,compiler不會抱怨
12/10 12:11, 8F

12/10 12:11, , 9F
你用static_cast去轉
12/10 12:11, 9F

12/12 17:28, , 10F
如果自己的struct,那就在第一個byte 加入type info
12/12 17:28, 10F
如果是我自己的.... 我一定不會用 void*....... ※ 編輯: yhn0tgb60 (218.35.163.53), 12/13/2015 00:17:00
文章代碼(AID): #1MPpTBW6 (C_and_CPP)