Задать вопрос
@Noortvel

Как выделяется память в классах?

Вот допустим у нас есть класс
class Examp{
    public:
    int size;
    string str2;
    string *str3;
    vector<int> arr1;
    vector<int> *arr2;
    Examp(){
    arr2 = new vector<int>();
    str3 = new string();
    }
    ~Examp(){
      delete arr2;
      delete str3;
      }
}

};
int main(){
   Examp ex = new Examp ();
    delete ex;
    Examp ex2();
}

Где выделяется память для переменных в случае динамического и в случае статического объявления?
  • Вопрос задан
  • 996 просмотров
Подписаться 2 Простой 1 комментарий
Ответ пользователя Mercury13 К ответам на вопрос (2)
@Mercury13
Программист на «си с крестами» и не только
Examp ex = new Examp ();
Неверный код, надо Examp* ex = new Examp;

В случае статического определения (Examp ex2;) — в той памяти, где обычно располагаются объекты. То есть:
• Если это поле объекта — то в теле объекта, которое может быть где угодно (куча, сегмент данных, стек).
• Если static/глобальный — то в сегменте данных.
• Если локальный — в стеке. Конкретно тут локальная переменная, и она будет в стеке.

В случае динамического определения (Examp* ex = new Examp;) — в «куче».
В этом примере, кроме операции new, которая заводит объект в куче, видим ещё и указатель, который располагается «там, где обычно» — в теле объекта, сегменте данных или стеке.
Ответ написан
Комментировать