ПрограммированиеФорумОбщее

С++ как работают кучи

#0
4:45, 9 мар 2012

Здравствуйте уважаемые знатоки С++, у меня следующая проблема, которую я опишу псевдокодом:

class A
{
  public:
  A* link;
  int data;
 
  A(void)
  {
      link = new A();
  }

  A* Get(void)
  {
      return link;
  }
};

A a1;
A a2;

// меняем местами содержимое классов А

A* copy = a1.link; // копируем
a1.link = a2.link;
a2.link = copy;

delete a1.link; // ЧТО УДАЛИТСЯ ЗДЕСЬ? выделенная память по адресу a1.link (на которую сейчас указывает a2.link) или выделенная память по адресу a2.link (на которую указывает a1.link)? как работает оператор delete в этом случае?

Второй вопрос попутно:

a2.Get()->data = 1;
Безопасна ли такая запись?

#1
7:43, 9 мар 2012

Boringirl
> delete a1.link; // ЧТО УДАЛИТСЯ ЗДЕСЬ?
то, что было в a2


> a2.Get()->data = 1;
безопасность определяется не этой записью, а тем, как у тебя будет выделяться память под link.

#2
14:13, 9 мар 2012

ещё деструктор надо написать для освобождения памяти и тогда не морочится с delete

~A()
  {
      delete link;
  }

#3
18:52, 9 мар 2012

С инкапсуляцией пока проблемы, кучу изучать рано.

Экзаменатор спрашивает студента: — Расскажите мне, как работает трансформатор.
— Ж-ж-ж.
— Два. Неправильно. Трансформатор работает так: у-у-у.

#4
8:39, 11 мар 2012

Boringirl
Я хренею. И причем здесь куча? Теорию о классах учите.

> delete a1.link; // ЧТО УДАЛИТСЯ ЗДЕСЬ?
1. Не удалится, а освободится.
2. Освободится память, которая выделялась при создании объекта a2.
3. Как писали в посте №2 конструктор класса будет вызываться до тех пор пока всю память не заберет (или исключение не сработает).

ПрограммированиеФорумОбщее

Тема в архиве.