cpp是否有理由偏向量<class_type *>来向量<void *>?</void *> </class_type *>

时间:2013-08-27 10:43:32

标签: c++ pointers vector

我有类A_class,我需要一个指向此类对象的指针向量。是否有充分的理由选择其中任何一种用法:

vector<void*> my_vector;
vector<A_class*> my_vector;

真的有区别吗?

编辑: 让我重新说一下 - 实际数组的存储方式是否存在差异?我不是在问安全性,而是在谈论性能。

5 个答案:

答案 0 :(得分:4)

应尽可能避免使用void *

这有两个原因:

  1. 您丢失了对象的类型。
  2. 代码变得更加混乱,因为您必须将void *强制转换回原始类型。
  3. 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; 

using void pointers