Qt框架中为什么使用了大量的xxPrivate数据类?这么做的目的是什么?(为了解决什么问题)
回答:
- 封装数据成员,避免提供头文件时将细节暴露出去;当后期发现库存在严重缺陷,需要增加或修改成员变量,用户的软件也一定需要重新编译;
- 二进制兼容。二进制兼容指的是,升级或者修复bug后,不需要依赖这个库的程序重新,编译程序的功能不会被破坏;
哪些常见做法会破坏二进制兼容:
- 给函数增加默认参数,现有的可执行文件无法传递这个参数
- 增加虚函数,造成vtbl表的排列变化
- 增加默认模板类型参数
- 改变 enum 的值,把 enum Color { Red = 3 }; 改为 Red = 4。这会造成错位。当然,由于 enum 自动排列取值,添加 enum 项也是不安全的,除非是在末尾添加
- 增加或减少类的数据成员
参考:
https://www.jianshu.com/p/87febb375969