![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
M9IC |
|
||||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 20.12.2007 Репутация: нет Всего: нет |
Здарова, народ!
Разбираюсь с конструкторами копирования и перегрузкой операторов, есть вот такой код: Классы:
После выполнения 5ой строки, херятся данные (перем. val) в экземпляре mpYdav, почему ? студия ВС 2005 вот скрины: До ![]() после ![]() ПОЧЕМУ ? |
||||
|
|||||
Cheloveck |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 3 Всего: 32 |
С чего это у тебя он тут "идёт"? Ты присваиваешь указателю pData адрес переданного объекта. Это, почти всегда, плохо. Где ты собираешься высвобождать память и как отличишь от того, что тебе передали? На NULL можно не проверять, но вот если будет адрес переданного объект - случиться анхендлед эксцепшен. -------------------- ![]() |
||||
|
|||||
M9IC |
|
||||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 20.12.2007 Репутация: нет Всего: нет |
Ну как же? Я же передаю объект по значению, а не адресс или сцылку. Сначала происходит копирование для передачи в функцию, а потом от этого уже скопированного элемента я беру адрес. Вот собсна и ответ напрашивается: потому-то там и получается мусор, так как скопированный элемент живет только в пределах функции. Это сообщение отредактировал(а) M9IC - 28.12.2010, 16:44 |
||||
|
|||||
M9IC |
|
||||||||||||||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 20.12.2007 Репутация: нет Всего: нет |
если делать так:
Не совсем понял, что я должен от чего отличить ? собирался делать так:
Это сообщение отредактировал(а) M9IC - 28.12.2010, 16:46 |
||||||||||||||
|
|||||||||||||||
Cheloveck |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 3 Всего: 32 |
pData у тебя объявляется как указатель на Any.
здесь ты берёшь адрес параметра и присваиваешь его указателю pData.Никаких конструкторов копирования не вызывается. Когда Вызывающая функция уничтожает переданный параметр, то твой pData указывает в никуда! Делать надо примерно так
Это сообщение отредактировал(а) Cheloveck - 28.12.2010, 18:50 -------------------- ![]() |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |