将新成员函数添加到 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 文件而不是标题中指定。上面的示例旨在关注二进制兼容性问题。