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