В какой области данных хранятся члены класса?
Начал изучать ООП и появилось несколько вопросов.
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 шт):
Инстанс класса - это непрерывный кусок памяти некоторого размера. Какого именно, можно узнать через sizeof. А значит поля класса хранятся там же, где и сам инстанс.
При этом, если полем является указатель, то говоря о нахождении в самом инстансе я имею в виду непосредственно указатель, а не то, на что он указывает.
Если полем является массив фиксированного размера (с динамическим можно что-то нахимичить, но вроде это не особо используется), то сами элементы массива хранятся внутри инстанса.
Память, выделенная через new и malloc выделяется в куче.
В стеке лежат только объекты, лежащие в переменных соответствующего типа.
PS: Ты delete забыл.
Нестатические поля класса хранятся там же, где и объект класса, которому они принадлежат.
Способ создания объекта не является определяющим для размещения создаваемого объекта в том или ином месте. В общем случае для двух примеров в вопросе нет никакого способа определить, где будут реально созданы эти объекты. Единственное, что тут можно сказать, это то, что у первого объекта будет automatic storage duration, а у второго - dynamic storage duration.