Здравствуйте, 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