Почему объект класса B=16, а объект A=4? Как влияет виртуальная функция на размер?
class A
{
void funcA();
int x;
};
class B
{
virtual void funcB();
int y;
};
На размер влияет не сама по себе виртуальная функция, а ее наличие - а именно наличие указателя на таблицу виртуальных функций, необходимую для реализации динамического полиморфизма..
Судя по результатам, вы компилировали 64-разрядное приложение :)
Update
Почему 16, а не 12... Итак, VC++, 64-разрадное приложение:
#include <iostream>
#include <iomanip>
using namespace std;
class A
{
void funcA();
int x;
};
class B
{
virtual void funcB();
int y;
};
#pragma pack(1)
class C
{
virtual void funcB();
int y;
};
int main(int argc, const char * argv[])
{
cout << sizeof(A) << endl;
cout << sizeof(B) << endl;
cout << sizeof(C) << endl;
}
Получаем:
4
16
12
Контекстное окружение должна уметь определять какая именно реализация вызывается(это реализация метода класса В
или какого то наследника?). Для этого создается таблица виртуальных функций, и каждый обьект имеет неявный указатель на эту таблицу. В стандартах C++ нет четкого определения как должна реализовываться динамическая координация, но компиляторы зачастую используют некоторые вариации одной и той же базовой модели:
Конкретно экземпляры класса В
будут иметь:
указатель на виртуальную функцию(vptr
)-64 битового приложения это
8
байт
тип int
_ выравнивается по размеру vptr
_ тоже 8 байт.
Итог 16 байт
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Рассмотрим класс итератора для массивов stdext::checked_array_iterator, который определен в заголовочном файле <iterator>Экземпляр класса можно использовать...
У меня есть объект который иногда мне нужно будет скопировать в другойесли быть точнее, то у меня в классе client_t есть 3 одинаковых объекта,...
Я работаю на C#, но полагаю, это касается любого языка использующий объектно - ориентированную парадигму
Есть класс Circle, который рисует окружности заданного размераЯ попытался сделать событие на клик мыши, которое показывало бы информацию по данному...