Re: Зачем надо throw new CMyException
От: ch00k  
Дата: 16.03.03 16:33
Оценка:
Здравствуйте, Borisman, Вы писали:

B>На вопрос, как нужно выбрасывать исключения, есть два мнения:

B>1) throw CMyException(...)
B>2) throw new CMyException(...)

B>

B>И то и то работает. Но во втоом случае приходится явно удалять экземпляр исключения в секции catch:

B>try {

B> ...
B> throw new CMyException(...);
B>} catch(CMyException *exc)
B>{
B> ...
B> delete exc; // Ну или там в большинстве случаев — exc->Delete(), которая вызывает delete this;
B>}

С точки зрения удобства и надёжности, лучше не использовать new. Но в этом случае нужно помнить что
в catch нужно ловить не CMyException ex, а CMyException & ex (а лучше вообще const CMyException & ex), в противном случае каждый раз будет вызываться конструктор копирования, что может в лучшем случае вызвать замедление работы, а в худшем (если конструктор копирования не описан, а нужен) вообще может привести к краху программы.

Что жа до передачи указателя, то это, на мой взгляд, слишком большой геморрой с потенциальной возможностью налететь потом на memory leaks
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.