Где хранятся переменные класса? c++
Пусть будет вот такой класс:
class A {
public:
int a;
int b;
float c;
};
Где выделяется память под переменные объектов этого класса, если выделить его: а)без new, б)с оператором new? И если они хранятся в стеке в любом случае, то стоит ли вместо этого выделять переменные через оператор new, если мой класс будет содержать немало переменных и количество объектов класса будет исчисляться сотнями?
Ответы (1 шт):
Переменные объявленные в классе - члены класса. Память выделяется сразу под объект класса, а не под каждый член. В выделенной под объект класса памяти переменные располагаются последовательно в порядке их объявления в классе.
Конкретно в вашем случае объект класса будет занимать ровно столько байт, сколько суммарно занимают переменные.
В общем случае:
- добавляются указатели на таблицу виртуальных функций (если есть)
- память занимаемая членами базовых классов (если класс наследуется от кого-то)
- выравнивание для маленьких типов (зависит от платформы)
и др.
Расположение в памяти зависит от того, где расположен объект этого класса.
A GlobalObject; // глобальный объект - в памяти программы
void foo(void)
{
A LocalObject; // локальный объект - на стеке
A* ptr = new A; // динамический объект - в куче
delete ptr;
}
int main()
{ // константные и статические объекты - в памяти программы
constexpr A ConstObject{ 0, 1, 2.0};
static A StaticObject;
}
Расположение в памяти взаимозависимо с временем жизни объектов.
Не путать с областью видимости.