В какой области данных хранятся члены класса?

Начал изучать ООП и появилось несколько вопросов.

1.Где хранятся переменные, которые являются полями-членами класса? То есть в какой области данных она будет хранится после создания объекта класса Alpha в функции main. В куче или на стеке?

#include <iostream>

class Alpha{
public:
  int A;
};

int main(){
  Alpha object;
}

2.Где будет хранится в данном случае поле-член класса - int A? На стеке или в куче?

#include <iostream>

class Alpha{
public:
  int A;
};

int main(){
  Alpha* object = new Alpha;
}

Ответы (2 шт):

Автор решения: Qwertiy

Инстанс класса - это непрерывный кусок памяти некоторого размера. Какого именно, можно узнать через sizeof. А значит поля класса хранятся там же, где и сам инстанс.

При этом, если полем является указатель, то говоря о нахождении в самом инстансе я имею в виду непосредственно указатель, а не то, на что он указывает.

Если полем является массив фиксированного размера (с динамическим можно что-то нахимичить, но вроде это не особо используется), то сами элементы массива хранятся внутри инстанса.


Память, выделенная через new и malloc выделяется в куче.

В стеке лежат только объекты, лежащие в переменных соответствующего типа.

PS: Ты delete забыл.

→ Ссылка
Автор решения: user7860670

Нестатические поля класса хранятся там же, где и объект класса, которому они принадлежат.

Способ создания объекта не является определяющим для размещения создаваемого объекта в том или ином месте. В общем случае для двух примеров в вопросе нет никакого способа определить, где будут реально созданы эти объекты. Единственное, что тут можно сказать, это то, что у первого объекта будет automatic storage duration, а у второго - dynamic storage duration.

→ Ссылка