【发布时间】:2013-02-04 09:15:58
【问题描述】:
据我所知,C++ 中的 void 指针 void* 可以指向任何东西。如果我想在不使用某种继承的情况下开发解决方案,这可能非常有用(对我来说)。但是我想知道的问题是这种方法是否存在任何性能缺陷?
【问题讨论】:
-
有什么性能缺陷?它只是一个指针,就像指向其他类型的指针一样。从您的实现描述看来,您正在尝试使用 C 方式解决 C++ 问题,但您不应该这样做。如果你想继承使用继承而不是
void *。 -
主要的麻烦是弄清楚它实际上指向什么,以便正确地将其转换回去。如果你弄错了,如果你能马上发现错误,你就很幸运了。
-
不会有性能缺陷,但您会丢失所有类型信息(从而丢失类型安全性)。这意味着编译器将无法发现错误,否则您将在运行时遇到它们(想想未定义的行为和难以跟踪的错误)。
-
我不会担心性能缺陷。最大的缺点是你用
void*做的任何事情都会给你未定义的行为。我认为void*的唯一定义用途是将其转换回指向正确的类型。 -
很容易出现性能缺陷。在某些时候,您必须在使用它之前弄清楚
void*的实际类型(除非您将它用作intptr_t)。如果该类型已经在程序中编码,则不需要该步骤。