Ho una classe con numero di membri di dati privati (alcuni dei quali statici), cui si accede tramite funzioni membro virtuali e non virtuali. Non ci sono funzioni inline e non ci sono classi di amici.Si modifica l'ordine dei membri di dati privati di classe ABI
class A
{
int number;
string str;
static const int static_const_number;
bool b;
public:
A();
virtual ~A();
public:
// got virtual and non-virtual functions, working with these memebers
virtual void func1();
void func2();
// no inline functions or friends
};
Does cambiando l'ordine dei membri di dati privati rompe ABI in questo caso?
class A
{
string str;
static const int static_const_number;
int number; // <-- integer member moved here
bool b;
...
};
Modifica
I tipi non sono cambiati, solo l'ordine dei membri. Anche i flag non vengono utilizzati. Il codice viene utilizzato come libreria condivisa, non esiste alcun collegamento statico a questo codice. Sono su Linux e i compilatori sono gcc-3.4.3 e gcc-4.1
Si noti che nel proprio caso, è necessario dichiarare un costruttore e un distruttore, poiché entrambi sono forniti in linea. –
@Johannes Sì, vengono dichiarati, mancano semplicemente nella descrizione. Ma grazie per la nota, è utile. –