Est-ce que l'ajout d'une nouvelle fonction membre dans la définition de classe de pointeur d efface la compatibilité binaire?Est-ce que l'ajout d'une nouvelle fonction membre dans la classe d pointer rompt la compatibilité binaire?
Par exemple, la nouvelle définition ci-dessous va-t-elle rompre la compatibilité binaire par rapport à l'original? (Question de côté, est-il un outil qui me dire si une nouvelle compatibilité binaire casse .donc par rapport à l'ancien .donc Sinon, comment puis-je vérifier manuellement?)
Original:
#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
New:
#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: Je comprends que la classe d pointer doit être spécifiée dans le fichier cc au lieu de l'en-tête. L'exemple ci-dessus est conçu pour se concentrer sur le problème de compatibilité binaire.
La tuile peut être améliorée ... il clarifie mieux que cette nouvelle fonction est ajoutée à une classe privée. – IsaacS