![]() |
|
Модераторы: bsa |
![]()
|
|
| heforma |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 9.8.2011 Репутация: нет Всего: нет |
Здравствуйте у меня возникла проблема
вот код:
этот код не работает =( я предполагаю из за того что для объекта temp1 срабатывает деструктор и в перегруженный оператор = поступает объект с указателями на пустоту. вот код исправленный моим преподавателем:
Я не могу понять почему код преподавателя работает, а мой нет =( ведь деструкторы у нас фактически одинаково отрабатывают (поправьте если не прав) За ранее благодарю =) |
||||
|
|||||
| heforma |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 9.8.2011 Репутация: нет Всего: нет |
Проблему решил... у меня не было конструктора копирования. Только я не пойму каким образом он спасает ситуацию... объясните пожалуйста.
|
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
т.к. ты делаешь return temp1; то компилятор пытается создать объект, который нужно вернуть из temp1, а т.к. нет конструктора копирования, то он просто делает точную копию объекта. Таким образом у двух объектов указатель str1 указывает на одну и ту же память (с str2, ессно, то же самое). При удалении одного объекта память освобождается, а при удалении второго получается бабах
Если упростить ситуацию (без классов), то происходит следующее
-------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| heforma |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 9.8.2011 Репутация: нет Всего: нет |
Спасибо =) теперь понятно =) |
||||
|
|||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Кстати, в операторах присваивания и сложения то же самое происходит для входного параметра. Его вообще лучше было описать как const A& - не будет лишних копирований объекта A |
|||
|
||||
| spyswamp |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 349 Регистрация: 18.8.2006 Репутация: 1 Всего: 7 |
heforma, изучи как правильно записываются формы операторов. У тебя ерунда написана.
-------------------- - why you call it beta? - cuz it's betta then nothin' |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |