Re[3]: throw, wchar_t* и память
От: Bell Россия  
Дата: 14.04.08 10:46
Оценка: +1
Здравствуйте, __kain, Вы писали:

__>Всем спасибо! Конструктор копирования спас человечество! Добавил три строчки:

__>
__>CSomeException(CSomeException& other)
__>{
__>    CSomeException(other._code, other._msg);
__>}
__>
И оно стало работать!


Ух ты! И с какой версии VC позволяет вызывать конструктор из другого конструктора?
Дело в том, что в стандартном С++ так делать нельзя.

__>Я теперь понял, что происходит при передаче по ссылке: вызывается конструктор копирования

Это заблуждение. Дело не в передаче по ссылке, а в том, как именно создается объект — исключения. А создается он как копия объекта, указанного в throw (здесь
Автор: Bell
Дата: 02.12.03
). Так что ссылка в catch совершенно не при чем.

__>Тогда понятно, почему глюк был. Я раньше думал, что если пишу "&", то "волшебным" образом передается в точности тот объект, который я ему передал! Как если бы я его использовал в месте вызова.


Это так и есть. В этом плане ссылка аналогична указателю.

__>wstring можно использовать, и boost, но мне было важно разобраться, в чем причина моей ошибки.
Любите книгу — источник знаний (с) М.Горький
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.