Mam klasę z liczbą prywatnych elementów danych (niektóre statyczne), do których dostęp mają wirtualne i nie-wirtualne funkcje składowe. Nie ma żadnych wbudowanych funkcji ani klas przyjaciół.Czy zmiana kolejności członków prywatnych danych klas łamie 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
};
Czy zmieniając kolejność członków prywatnych danych łamie ABI w tym przypadku?
class A
{
string str;
static const int static_const_number;
int number; // <-- integer member moved here
bool b;
...
};
Edit
typy nie są zmieniane, tylko kolejność członków. Nie są również używane żadne flagi bitowe. Kod jest używany jako biblioteka współdzielona, nie ma statycznego linkowania do tego kodu. Jestem na Linuksie, a kompilatory to gcc-3.4.3 i gcc-4.1
Zauważ, że w twoim przypadku będziesz musiał zadeklarować konstruktor i destruktor, ponieważ oba są w inny sposób dostarczane inline. –
@Johannes Tak, są one zadeklarowane, po prostu brakowało ich w opisie. Ale dzięki za notatkę, jest to przydatne. –