新しいメンバー関数をポインタクラス定義に追加するとバイナリ互換性が損なわれますか?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
FYI:ヘッダーの代わりにccファイルにポインタクラスを指定する必要があります。上記の例は、バイナリ互換性の問題に焦点を当てて考案されています。
タイルを改善することができます...新しい機能がプライベートクラスに追加されていることを明確にします。 – IsaacS