2013-03-16 6 views
3

Я изучаю идиом PIMPL. Одним из преимуществ является двоичная совместимость. Мне интересно, каковы преимущества бинарной совместимости. Благодаря!Почему бинарная совместимость?

+0

дайте ссылку для претензии –

ответ

3

Он избегает Fragile Binary Interface Problem. Это выглядит так:

  1. Программа использует библиотеку.

  2. Пользователь обновил библиотеку. Обновление изменяет что-то в бинарном интерфейсе библиотеки.

  3. Программа теперь не работает, пока не будет перекомпилирована, поскольку она была создана для старого двоичного интерфейса.

Одним из преимуществ Pimpl идиомы является то, что она позволяет перемещать вещи, которые, как правило, быть частью открытого интерфейса класса в его частный интерфейс (на самом деле, в интерфейс частного класса). Вы можете изменить частный интерфейс, не нарушая совместимость с двоичными файлами.

0

Преимущество идиомы PIMPL заключается не столько в бинарной совместимости, сколько в сокращенной потребности в перекомпиляции, если вы изменили реализацию или даже макет класса. Например, если вы добавите новый член данных в класс, который изменит макет класса, и вам, как правило, потребуется перекомпилировать всех клиентов этого класса, но не если вы используете идиом PIMPL.

Бинарная совместимость больше связана с совместимостью с несколькими компиляторами (и версиями компилятора), и единственный способ сделать это на C++ - это интерфейсы (абстрактные классы), которые реализуются классами, не подверженными клиентам. Это связано с тем, что макет vtable абстрактных классов реализуется одинаково всеми компиляторами. Многие API, такие как API DirectX, подвергаются таким образом, чтобы их можно было использовать с любым компилятором.

+0

Причина, по которой вам не нужно перекомпилировать, - это именно то, что вы сохранили двоичную совместимость. –