![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
wowka19 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 30.11.2011 Репутация: нет Всего: нет |
есть класс реализующий двусвязный список
что-то типа:
в конструкторе определяются nextNode и prevNode. в деструкторе также происходит переопределение указателей соседних узлов на удаляемый узел. Проблема: Насколько мне известно при операции присвоения A = B, срабатывает деструктор A. И уже в теле метода "operator=()" указатели на соседние объекты недоступны, а они мне нужны! как быть? |
|||
|
||||
Result |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 15.5.2011 Репутация: 3 Всего: 5 |
A = B; это одно и тоже что A.operator=(B)
Деструкторы вызываются при выходе из области видимости локального объекта или оператором delete для объекта из кучи или при раскрутке стека при выбросе исключения (если объект статический то кажется при выходе из main, это нужно проверить и для глобальных тоже). Потому смотри что происходит в операторе присвоения. Это сообщение отредактировал(а) Result - 21.1.2012, 14:28 |
|||
|
||||
wowka19 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 30.11.2011 Репутация: нет Всего: нет |
То есть мне необходимо в operator=(const Node &) освобождать всю память самому?
типа: class Node { Type * data; } Node & operator=(const Node & rNode) { delete data; Type * new_data = new Type(rNode.data); // конструктор копирования Node * newNode = new Node(); newNode->data = new_data; return * newNode; } Блин! НЕ ПОНЯТНО! Почему нельзя сделать VOID operator=(), раз все переопределения можно сделать в самом теле operator'а? |
|||
|
||||
Albor |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 589 Регистрация: 28.2.2009 Репутация: 2 Всего: 9 |
Почему срабатывает деструктор? Объект А разве уничтожается? Или вы хотите нагрузить этот оператор каким-то иным назначением, чем получение копии.
А как же, например, такое выражение A=B=C, если оператор не будет ни чего возвращать. |
||||
|
|||||
Result |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 15.5.2011 Репутация: 3 Всего: 5 |
Прочти "Наиболее эффективное использование C++ 55 верных советов ..." глава 2 и 3. Найдешь там ответы на свои вопросы в понятной и простой форме.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |