|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
12.12.2012, 21:05 | #1 |
Форумчанин
Регистрация: 16.01.2011
Сообщений: 168
|
Почему при перегруженных = и +, вызывается...
Почему при перегруженных = и +, сразу после отработки +(перегр.), вызывается деструктор, и =(перегр.) уже ничего не получает, за код не ругайте потом все мелочи будут исправляться, главное узнать причину почему деструктор сразу вызывается после A + B
Вот код: Код:
|
12.12.2012, 21:13 | #2 |
Форумчанин
Регистрация: 16.01.2011
Сообщений: 168
|
И почему то на билдере работает на vs2012 не работает.
|
12.12.2012, 21:14 | #3 |
С++, Delphi
Форумчанин
Регистрация: 24.11.2012
Сообщений: 495
|
При вызовах оператора = + - * / оператор должен создать и вернуть новую копию.... лишь при += -= /= *= возвращают ссылку(не указатель) на this.
к примеру Код:
a = v + c + u; будет жопа.
Если помог, тут весы есть , Вам не сложно, а мне приятно.
|
12.12.2012, 21:19 | #4 |
С++, Delphi
Форумчанин
Регистрация: 24.11.2012
Сообщений: 495
|
скорее всего проект тот как бы debug режиме, тогда память сохряняется в release должны быть траблы.
///--------- Код:
Если помог, тут весы есть , Вам не сложно, а мне приятно.
Последний раз редактировалось Perchik71; 12.12.2012 в 21:31. |
12.12.2012, 21:44 | #5 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Цитата:
|
|
12.12.2012, 21:48 | #6 |
С++, Delphi
Форумчанин
Регистрация: 24.11.2012
Сообщений: 495
|
)
Когда ты научишься писать код... который работает в любом случаи... вместо оскорблений мм?
Если помог, тут весы есть , Вам не сложно, а мне приятно.
|
12.12.2012, 21:48 | #7 | ||
Форумчанин
Регистрация: 16.01.2011
Сообщений: 168
|
Цитата:
Цитата:
|
||
12.12.2012, 21:57 | #8 | |
С++, Delphi
Форумчанин
Регистрация: 24.11.2012
Сообщений: 495
|
Цитата:
вызывается обычно создание нового объекта а потом конструктор копий.... об этом писал сам янг... поэтому, дабы избежать лишнего a(b), будет существенно быстрее..... я поглядел на код... и мне лично думается что деструктор вызываеться как бы на автомате.... это свойсво компиляторов... видимо в вс сначала уничтожаеться создаёться новый.. а потом уже и копия.
Если помог, тут весы есть , Вам не сложно, а мне приятно.
|
|
12.12.2012, 22:07 | #9 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Цитата:
1. Вызов копирующего конструктора. 2. Вызов оператора= Если речь идет об оператор=, то нужны особые причины, что бы не возвращать ссылку. Создавать новый объект, уповая на RVO/NRVO без особой необходимости - признак непрофессионала. Поскольку не контролируемо, когда эти оптимизации откажут |
|
12.12.2012, 22:19 | #10 |
С++, Delphi
Форумчанин
Регистрация: 24.11.2012
Сообщений: 495
|
Bers, напиши книгу в 100 000 экзепляров.... диктуй и читай свои мысли миллионам людей....
Кстати = должно подрузомивать такую стратегию.... ибо объект уничтожается.... ты хоть застрелись... this уже уничтожен. нужен новый объект.. конструктор копий вызывается либо в операторе = или как фуна... //----- ссылка TTipe& указатель TTipe* в моём примере ссылка не нужна.. ибо делается новый объект.... в += ссылку нужна... ибо мы изменяем содержимое... A += D += H; в си нельзя писать.. и это безопасно.
Если помог, тут весы есть , Вам не сложно, а мне приятно.
Последний раз редактировалось Perchik71; 12.12.2012 в 22:21. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Почему вызывается деструктор? | MrGukk | Общие вопросы C/C++ | 13 | 23.08.2012 17:42 |
перегруженных функций..???? | /*Oleh*/ | Общие вопросы C/C++ | 2 | 20.02.2011 01:36 |
Приведение процедурных типов в перегруженных методах | AndreyCo | Общие вопросы Delphi | 8 | 10.11.2009 19:20 |
Как отловить события которое вызывается при розворачивании подменющек (PopupMenu) | DarkEvil | Общие вопросы Delphi | 9 | 09.05.2009 18:17 |
Почему ошибка при копировании? | valerij | Microsoft Office Excel | 8 | 02.05.2009 01:49 |