首页 > 解决方案 > void指针的相关性

问题描述

查看同事的代码,我看到它的一些句柄存储为 void 指针。

// Class header
void* hSomeSdk;

// Class implementation
hSomeSdk = new SomeSDK(...);
((SomeSDK*)hSomeSdk)->DoSomeWork();

现在我知道有时句柄是空指针,因为在运行之前可能不知道句柄的实际类型是什么。或者当我们需要共享指针而不透露其实际结构时,它可以提供帮助。但在我的情况下似乎并非如此:它将始终是 SomeSDK 并且不会在创建它的类之外共享。这段代码的作者也离开了公司。

还有其他原因为什么让它成为一个空指针是有意义的?

标签: c++refactoring

解决方案


没有。

如果我不得不猜测,前同事不熟悉前向声明,因此不知道他们仍然可以SomeSDK*在不包含整个SomeSDK定义的情况下在标题中执行。

鉴于您提到的约束,此模式实现的唯一目的是消除某些类型安全性,使代码更难阅读/维护,并生成 Stack Overflow 问题。


推荐阅读