Да, с исключениями правильно и красиво — если только можно их использовать.
Доводилось писать COM-объекты, которые должен были быть предельно маленькими
по размеру. Пришлось отказаться от стандартного рантайма, а вместе с ним и от
исключений. Использовал конструкцию типа
do
{
hRes = COMOBJECT1.Initialize();
if ( FAILED(hRes) )
break;
hRes = COMOBJECT2.Initialize();
if ( FAILED(hRes) )
break;
}
while(false);
, и даже потом сделал макро-обертки, т.е.
#idef USE_RUNTIME
#define com_try try
#else
#define com_try do
#endif
Т.е. код потом можно было компилить и с исключениями, и без.