Будет ли добавление новой функции-члена в определение класса d указателя нарушить двоичную совместимость?
Например, будет ли новое определение ниже бинарной совместимости по сравнению с оригиналом? (дополнительный вопрос, есть ли инструмент, который сообщит мне, если новый .so нарушает бинарную совместимость по сравнению со старым .so? Если нет, то как проверить вручную?)
Оригинал:
#ifndef __TESTBC_H__
#define __TESTBC_H__
class APrivate;
class A
{
public:
int get() { d->update(); return _d->get(); }
private:
APrivate *_d;
};
class APrivate
{
public:
int get() { return _val; }
void update() { _val = 1; }
private:
int _val;
};
#endif
Новое:
#ifndef __TESTBC_H__
#define __TESTBC_H__
class APrivate;
class A
{
public:
int get() { _d->update(); return _d->get(); }
private:
APrivate *_d;
};
class APrivate
{
public:
int get() { return _val; }
void update() { _val = 1; multiply(); }
void multiply() { _val = _val * 10; }
private:
int _val;
};
#endif
К вашему сведению: я понимаю, что указатель класса d должен быть указан в файле cc вместо заголовка. Приведенный выше пример придуман, чтобы сосредоточиться на проблеме бинарной совместимости.