我有一些编写 C 库的经验,但在编写此类库时,我从未阅读过任何描述良好实践的正式文档。我的问题主要涉及两个主题:
- 如何保持二进制兼容性?(我听说过 pImpl 成语,d-pointer)
- 如何设计保持向后兼容的接口?
从我的研究中可以看出,关于二进制兼容性的主要内容是,我可以使用 pImpl 习惯用法使库二进制兼容,但即使在使用 pImpl 时,更改结构/添加新数据成员等也会影响它的二进制兼容性。另外,有没有办法在不破坏二进制兼容性的情况下向库中添加新方法/函数?我假设添加这些东西会改变库的大小和布局,从而破坏兼容性。
有没有检查二进制兼容性的工具?
我已经阅读了这些文章。还有其他我可以阅读的文档吗?
http://en.wikipedia.org/wiki/Opaque_pointer
http://techbase.kde.org/Policies/Binary_Compatibility_Issues_With_C++
此外,是否有文章在设计库接口的背景下描述了内存的所有权问题。一般约定是什么?谁拥有内存,多长时间,谁负责释放内存等?