Как выделяется память в классах? Вот допустим у нас есть класс class Examp{
public:
int size;
string str2;
string *str3;
vector arr1;
vector *arr2;
Examp(){
arr2 = new vector();
str3 = new string();
}
~Examp(){
delete arr2;
delete str3;
}
}
};
int main(){
Examp ex = new Examp ();
delete ex;
Examp ex2();
}
Где выделяется память для переменных в случае динамического и в случае статического объявления?

21 Авг 2019 в 06:23
253 +1
0
Ответы
1

Память для переменных в случае динамического объявления выделяется в куче (heap), а в случае статического объявления - в стеке (stack).

В вашем примере:

При создании объекта Examp ex в функции main память для объекта будет выделена на стеке.При создании объекта Examp *ex = new Examp() в функции main память для объекта будет выделена в куче.При создании объекта Examp ex2() в функции main память для объекта также будет выделена на стеке. Кроме того, для создания объекта в данном случае следует использовать конструкцию Examp ex2;, а не Examp ex2();.

Для динамически выделенных ресурсов (указателей на vector и string в вашем классе Examp) необходимо быть внимательным и освобождать выделенную память в деструкторе класса с помощью операторов delete, чтобы избежать утечек памяти.

20 Апр 2024 в 13:19
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир