Ich habe eine Klasse mit der Anzahl der privaten Datenelemente (einige von ihnen statisch), auf die von virtuellen und nicht virtuellen Member-Funktionen zugegriffen wird. Es gibt keine Inline-Funktionen und keine Freundesklassen.Wird die Reihenfolge der Klasse private Datenelemente bricht 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
};
Ist eine Änderung der Reihenfolge der privaten Datenelemente bricht ABI in diesem Fall?
class A
{
string str;
static const int static_const_number;
int number; // <-- integer member moved here
bool b;
...
};
bearbeiten
Die Typen werden nicht verändert, nur die Reihenfolge der Mitglieder. Es werden auch keine Bit-Flags verwendet. Der Code wird als gemeinsam genutzte Bibliothek verwendet. Es gibt keine statische Verknüpfung zu diesem Code. Ich bin auf Linux und die Compiler sind gcc-3.4.3 und gcc-4.1
Beachten Sie, dass Sie in Ihrem Fall einen Konstruktor und einen Destruktor deklarieren müssen, da beide inline bereitgestellt werden. –
@Johannes Ja, sie sind deklariert, nur knapp in der Beschreibung. Aber danke für die Notiz, es ist nützlich. –