- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
// Найдено глубоко в продакшн-коде некоего транслятора:
HRESULT hr = S_OK;
try {
hr = ParseSection(sourceTemplate, output, CS_IF);
}
CATCH_CG_EXCEPTION(this, hr)
CATCH_CG_EXCEPTION_END
// далее смотрим определения этих чудо-макросов
#define CATCH_CG_EXCEPTION(gen, hr) \
catch (CHierCGException* e) { \
(gen)->WriteExceptionMessage(e); \
if (e->m_bContinue) { \
if (e->m_useHRESULT) hr = e->m_hResult; else hr = E_FAIL; \
} \
delete e; \
if (!(e->m_bContinue))
#define CATCH_CG_EXCEPTION_END \
throw; \
}
guest 27.10.2009 10:00 # +3
guest 27.10.2009 10:55 # 0
throw new CHierCGException();
, то delete надо делать? Кто читал стандарт, можете пояснить? Ведь, по идее, можно выкинуть указатель хоть на NULL:
throw (CHierCGException*) NULL;
PS: то, что delete e стоит перед if-ом, я и так вижу.
guest 27.10.2009 11:09 # 0
throw (MyType*)NULL; до сих пор встречать не приходилось :)
Ведь, естественно, у исключения хочется почитать what()
generalgda 27.10.2009 12:55 # +2
interested 27.10.2009 13:51 # 0
Затем удалить данные.
Затем перехватить уже указатель на ничто выше. =]
Снова выделить память под эту ошибку на другом уровне... Ууу... Сколько возможностей... (j/k)
Мне кажется это кто-то из Java мигрировал...
interested 27.10.2009 13:53 # 0
Видимо это просто кривокодер...
Всё в кучу свалял...
guest 04.11.2009 16:55 # 0
generalgda 27.10.2009 12:56 # 0
guest 27.10.2009 13:46 # 0