作者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/cn.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