Теперь я внес небольшое изменение в функцию объекта, которую держит Y.
Что нужно сделать, зависит от того, какие именно изменения вы сделали.Для таких типов ситуаций мы можем различать два типа изменений: изменения, нарушающие ABI, и изменения, совместимые с ABI.
ABI (двоичный интерфейс приложения) - это интерфейс скомпилированногообъект как бинарный уровень.Аналогично тому, как функции C ++ имеют API (например, сигнатуры функции являются частью API), скомпилированный машинный язык имеет ABI, который зависит, помимо прочего, от API и соглашения о вызовах.
Знание того, что изменяетсянарушают ABI и не могут быть трудной задачей.Но, как правило:
- , если вы не изменили API Y, ABI Y не изменится;
- если вы изменили API Y, ABI Y изменится.
Теперь, если вы нарушили ABI Y
, вы должны выпустить его новую версию (назовем его Y-2
).X
не будет совместим с Y-2
и потребует обновления (опционально) и перекомпиляции (обязательно) и выпуска в качестве новой версии (назовем это X-2
).X
и Y-2
не совместимы с ABI.X-2
и Y
не совместимы с ABI.
Если ABI Y
не тронут, вы можете безопасно распространять новую версию Y
(назовем ее Y-1.1
), которая заменитY
на целевых компьютерах и ссылка с оригиналом X
.
Из комментария видно, что:
Я сделал только одно удаление: утечка объекта исделал это в NULL.
Это ни API, ни ABI не нарушают.Вы можете безопасно распространять только Y-1.1
.