c++ - void指针的相关性
问题描述
查看同事的代码,我看到它的一些句柄存储为 void 指针。
// Class header
void* hSomeSdk;
// Class implementation
hSomeSdk = new SomeSDK(...);
((SomeSDK*)hSomeSdk)->DoSomeWork();
现在我知道有时句柄是空指针,因为在运行之前可能不知道句柄的实际类型是什么。或者当我们需要共享指针而不透露其实际结构时,它可以提供帮助。但在我的情况下似乎并非如此:它将始终是 SomeSDK 并且不会在创建它的类之外共享。这段代码的作者也离开了公司。
还有其他原因为什么让它成为一个空指针是有意义的?
解决方案
没有。
如果我不得不猜测,前同事不熟悉前向声明,因此不知道他们仍然可以SomeSDK*
在不包含整个SomeSDK
定义的情况下在标题中执行。
鉴于您提到的约束,此模式实现的唯一目的是消除某些类型安全性,使代码更难阅读/维护,并生成 Stack Overflow 问题。
推荐阅读
- python - 使用 manylinux + auditwheel pip Wheels 与 Conda 打包
- sql - 从 Oracle 表生成插入
- rust - 将借来的值保存在集合中的 Rust 方法是什么?
- apache-kafka - Kafka Streams - 如何更好地控制内部创建的状态存储主题的分区?
- git - GIT - 致命:不能使用 .idea/ 作为排除文件
- jquery - 如果用户名和电子邮件都可用,如何显示按钮
- java - FireFox 无法在 ws://1.1.1.26:81 建立与服务器的连接
- inno-setup - 将包含引号的命令行参数传递给安装程序
- linux - 复制名称中包含偶数的文件 - bash
- sql-server - SELECT 语句上的 SQL Server 消息 511 错误