Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
[C++] Раз уж пользуешься CPP, используй exception-ы 13.04.03 16:00 Число просмотров: 1180
Автор: amirul <Serge> Статус: The Elderman
|
Будет намного нагляднее. Тем более, что как написано в MSDN:
The default behavior of a new handler is to throw an object of type bad_alloc. A null pointer designates the default new handler.
> > Если уж ты в конструкторе написал проверку успешного > > выделения памяти, то чем провинился operator+? :) > > Сейчас у меня проверка успешного выделения памяти везде, > где выделяется память под саму строку (char *dstr). Если не > выделилась - exit(1). А для вспомогательный переменных > сделаю что-нить типа флаговой переменной memflag, которая > по дефолту=0 и увеличивается при каждой ошибке выделения > памяти. В конце каждого метода либо проверка if(memflag) > return -2; либо еще что-нибудь.. Если у тебя выполнилась следующая после new инструкция, значит память выделилась нормально. Если ты не будешь ловить bad_alloc, то когда стек свернется за пределы main-а, там стоит дефолтовый обработчик эксепшнов, который вызывает terminate, которая по дефолту вызывает abort. Короче, не надо ничего писать и тогда ты вывалишься из проги если память выделилась неудачно.
Если тебе это не подходит, пользуйся или new(nothrow) (нужно сделать #include <new> для использования) или сделать:
try {
// Любое количество new без проверки успешности
} catch(bad_alloc ba) {
// Освободить немного памяти и попытаться еще раз
}
Если компилятор поддерживает стандарт C++ от 98-го года (номер не помню, но принимался он ISO/IEC), то все должно работать правильно. VC начиная с 6-го пытаются поддерживать этот стандарт (хотя я еще не слышал ни об одном компилере, который бы полностью соответствовал этому стандарту).
|
|
|