Здравствуйте уважаемые знатоки С++, у меня следующая проблема, которую я опишу псевдокодом:
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;
Безопасна ли такая запись?
Boringirl
> delete a1.link; // ЧТО УДАЛИТСЯ ЗДЕСЬ?
то, что было в a2
> a2.Get()->data = 1;
безопасность определяется не этой записью, а тем, как у тебя будет выделяться память под link.
ещё деструктор надо написать для освобождения памяти и тогда не морочится с delete
~A()
{
delete link;
}
С инкапсуляцией пока проблемы, кучу изучать рано.
Экзаменатор спрашивает студента: — Расскажите мне, как работает трансформатор.
— Ж-ж-ж.
— Два. Неправильно. Трансформатор работает так: у-у-у.
Boringirl
Я хренею. И причем здесь куча? Теорию о классах учите.
> delete a1.link; // ЧТО УДАЛИТСЯ ЗДЕСЬ?
1. Не удалится, а освободится.
2. Освободится память, которая выделялась при создании объекта a2.
3. Как писали в посте №2 конструктор класса будет вызываться до тех пор пока всю память не заберет (или исключение не сработает).
Тема в архиве.