【发布时间】:2012-09-22 23:53:28
【问题描述】:
我一直认为在将 void* 转换为 struct* 后检查指针是避免无效转换的有效方法。类似的东西
MyStructOne* pStructOne = (MyStructOne*)someVoidPointer;
if(!pStructOne)
return 0;
看来情况并非如此,因为我可以将相同的数据转换为两个不同的结构并获得相同的有效地址。然后程序很乐意用其中的任何随机数据填充我的结构字段。
什么是转换结构指针的安全方法?
我不能使用 dynamic_cast,因为它不是一个类。
感谢您的帮助!
【问题讨论】:
-
简单。使用 C++ 代替
void *。 -
@shf301,但您仍然需要至少一个虚函数才能使用
dynamic_cast,而结构通常没有。 -
dynamic_cast 绝对不适用于结构。我得到一个编译错误。我也无法避免使用 void*.我正在使用 libev,所以我唯一的选择是 void*
-
@JoshBrittain:
dynamic_cast当然可以使用结构。它不使用的是没有虚拟成员函数的类型。 -
@JoshBrittain:你和 shf301 谈论的事情略有不同。在 C++ 中,
struct和class是等价的,唯一的区别是默认访问说明符在每种情况下都是 public/private。另一方面,许多人使用struct来指代POD 类型(其中其他属性没有虚函数)。将dynamic_cast与没有虚函数的类一起使用是不合法的,无论该类是使用struct还是class关键字创建的。