Как выделяется память в классах? Вот допустим у нас есть класс 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(); } Где выделяется память для переменных в случае динамического и в случае статического объявления?
Память для переменных в случае динамического объявления выделяется в куче (heap), а в случае статического объявления - в стеке (stack).
В вашем примере:
При создании объекта Examp ex в функции main память для объекта будет выделена на стеке.При создании объекта Examp *ex = new Examp() в функции main память для объекта будет выделена в куче.При создании объекта Examp ex2() в функции main память для объекта также будет выделена на стеке. Кроме того, для создания объекта в данном случае следует использовать конструкцию Examp ex2;, а не Examp ex2();.
Для динамически выделенных ресурсов (указателей на vector и string в вашем классе Examp) необходимо быть внимательным и освобождать выделенную память в деструкторе класса с помощью операторов delete, чтобы избежать утечек памяти.
Память для переменных в случае динамического объявления выделяется в куче (heap), а в случае статического объявления - в стеке (stack).
В вашем примере:
При создании объекта Examp ex в функции main память для объекта будет выделена на стеке.При создании объекта Examp *ex = new Examp() в функции main память для объекта будет выделена в куче.При создании объекта Examp ex2() в функции main память для объекта также будет выделена на стеке. Кроме того, для создания объекта в данном случае следует использовать конструкцию Examp ex2;, а не Examp ex2();.Для динамически выделенных ресурсов (указателей на vector и string в вашем классе Examp) необходимо быть внимательным и освобождать выделенную память в деструкторе класса с помощью операторов delete, чтобы избежать утечек памяти.