2013-03-16 97 views
3

我正在学习PIMPL习语。它的一个优点是二进制兼容性。我想知道二进制兼容性的优点是什么。谢谢!为什么二进制兼容?

+0

给出索赔的参考 – 2013-03-16 03:45:26

回答

3

它避免了Fragile Binary Interface Problem。它是这样的:

  1. 程序使用库。

  2. 用户升级库。升级改变了库的二进制界面中的某些东西。

  3. 程序现在不能工作,直到重新编译为止,因为它是为旧的二进制接口构建的。

之一PIMPL方法的优点是,它可以让你的东西,通常是一个类的公共接口的一部分转移到其专用接口(其实为一体的民营类的接口)。您可以更改专用接口而不破坏二进制兼容性。

0

PIMPL习惯用法的优点不在于二进制兼容性,而在于如果更改实现或者甚至是类的布局,减少对重新编译的需求。例如,如果将新的数据成员添加到类中,则会更改类的布局,并且通常需要重新编译该类的所有客户端,但是如果使用PIMPL惯用语,则不会。

二进制兼容性更多的是与多个编译器(以及编译器版本)兼容,并且在C++中唯一能做到这一点的方法是使用由不向客户端公开的类实现的接口(抽象类)。这是因为抽象类的vtable布局是由所有编译器实现的。许多API(例如DirectX API)都以这种方式公开,以便它们可以与任何编译器一起使用。

+0

您不必重新编译的原因正是您保留了二进制兼容性。 – 2015-11-01 10:18:57