我有 class A_class
,我需要一个指向此类对象的指针向量。是否有充分的理由偏爱以下两种用法:
vector<void*> my_vector;
vector<A_class*> my_vector;
真的有区别吗?
编辑:让我换个说法 - 实际数组的存储方式有什么不同吗?我问的不是安全,而是性能。
void *
应尽可能避免使用。
这有两个原因:
void *
转换回原始类型。在 C++ 中(多亏了模板)很少有void *
真正有意义的情况。我确定有一些,但我现在真的想不出任何情况(除了出于历史/兼容性原因需要使用它时,例如将指向类的指针转移到“C”代码,它在哪里不理解 的概念class
,所以不能给它正确的类型)。
除非您强制转换它,否则您无法做很多void*
事情,因此使用它与实际类型相比实际上没有任何优势。
即使唯一的原因是避免不必要的演员阵容,那也足够了。虽然不是。您可能会将其void*
转换为任何东西并错误地使用结果。使用真实类本身还有一个额外的好处是代码更清晰。
真的有区别吗?
Avector<void*>
还将接受 type 的值int*
,YourClassHere**
以及您可以想象的任何其他指针。这是不安全的,所以除非你有充分的理由使用它(我想不出很多)——不要。
为什么您甚至将其视为替代方案?
它还要求您A_class*
在使用它们时显式地将指针转换回它们(这很丑陋、冗长且容易出错)。
您应该记住,不能直接取消引用 void 指针。您最终必须将其类型转换为您的班级。
因此,如果没有任何充分的理由使用 void 指针,并且您确定该向量应存储指向 A_class 对象的指针,那么我宁愿避免使用 void 指针。
你选择了
vector<*void> my_vector;
如果您不知道将存储什么类型的对象my_vector
。如果您知道它们将是类型,请A_class
使用
vector<A_class*> my_vector;