Форум программистов, компьютерный форум CyberForum.ru

Обработка исключений для new - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ рядки http://www.cyberforum.ru/cpp-beginners/thread114457.html
помогите зделать прогу которая сделает выравнивание по правому краю введенного текста для чего в каждой строке использовать функцию WIDE(str.k) Добавлено через 2 часа 33 минуты помогите пожалуйста.
C++ Сортировка C++ Доброго времени суток. Помогите пожалуйста отсортировать массив структур любыми 2-мя способами (сорт. пузырьком, сорт. вставками, сорт. выбора) одним способом сортировка по цене, вторым по номеру. #include <iostream.h> #include <conio.h> struct bd { char name ; float price; float number; } st ; http://www.cyberforum.ru/cpp-beginners/thread114431.html
C++ Производительность
Подскажите, где или что почитать о том, как писать БЫСТРЫЕ программы? (про разработку высоконагруженных программ). Копаюсь в интернете - но нахожу крупицы... И всё бессистемно. Спасибо.
C++ Конструкторы классов
Схематично: class A {public: A() {}//конструктор А . . . //методы класса А } class B: public A {public: B() {}//конструктор B
C++ Массив http://www.cyberforum.ru/cpp-beginners/thread114405.html
Помогите переделать в функцию плз а то не получается( #include <iostream> #include <conio.h> #include <ctime> using namespace std; int main() {
C++ Переполнение стека Хочу полюбопытствовать. Вычитал недавно, что на стек выделяется ограниченная область памяти, и в языке Си это 4 Кб. Вопрос: Если мне нужно будет работать со стеком, и определять его непосредственно через линейный список, то, как мне задать ту грань, за которую бы не позволяла программа пользователю переходить? И еще один: Когда идёт процесс очистки стека, следует освобождать каждый узел, или... подробнее

Показать сообщение отдельно
Genius Ignat
1236 / 774 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
09.04.2010, 11:54
Не большой итог, который я подвел для себя.

По мне так лучше не исключение а NULL обрабатывать.
Только этот способ по умолчанию имеет две запарки, для моего примера надо написать
оболочку new и тогда всё гарантированно будет срабатывать, а пример ISergey показывает что
везде надо прописывать nothrow, как то тоже геморрой.

И собственно небольшой вопрос есть ли new по умолчанию возвращающая NULL?
старая добрая malloc возвращает же значение о неудачном выделении,
и ни каких try catch.

Может исключения и дают какие то преимущества, допустим для конструкторов и других
конструкций не имеющих возврат знач, для меня исключения просто портят читаемость.

Добавлено через 33 минуты
Странно при обработке new хоть на NULL хоть try catch, встает вопрос и что делать в обработке,
то ли закрыть программу все равно не правильно работает, либо попробовать еще раз new
,а если еще раз не удачно опять обработка(бесконечность),
вообще без выделенной памяти я не вижу вообще смысла продолжать работать
(всё равно вывалится ошибка runtime),
или что на каждом исключении или NULL я должен
разрабатывать план действий (B), который тоже ни к чему не приведет,
так как за одной ошибкой может быть другая ошибка.

Тогда получается зачем клиенту обрабатывать конструктор, когда в конструкторе при
ошибке можно закрыть программу и вызвать причину, всё равно не чего по моему предпринять даже
при обработке конструктора не возможно, тем более а если объектов на всю программу тьма
а планов на всякий случай должно быть пропорционально их количеству.

Да и тем более зачем клиенту информировать при ошибке в конструкторе,
когда ошибка не от тебя зависит и не ты её сделал,
даже информативность обработки в клиенте не поможет, допустим и что толку макросы assert
точка в клиенте где произошла ошибка выделения памяти, тоже не чего не даст.

Извините что не в тему но данным вопрос мне интересен.
Что вообще делать если память не выделилась?
Плакать или что?

Добавлено через 11 минут
Genius Ignat, ISergey прав, согласно стандарту в случае ошибки оператор new возбуждает исключение std::bad_alloc. В связи с эти проверка на NULL не уместна.
Все законно, если не будет обработки исключения и не будет возврата какой нибудь как...шки
из new, тогда указатель инициализированный NULL после new всё равно будет NULL,
ещё раз говорю не я это придумал, приводить код microsoft не буду, все равно одно и тоже.

Добавлено через 6 минут
не буду, все равно одно и тоже.
А если хотите могу привести, если вы сомневаетесь в компетентности microsoft.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru