2013-03-16 101 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