nothrow or exception?

Я студент и у меня небольшие знания по C ++, которые я пытаюсь расширить. Это скорее философский вопрос ... Я не пытаюсь что-то реализовать.

Поскольку

#include <new> 
//...
T * t = new (std::nothrow) T();
if(t)
{
    //...
}
//...

будет скрывать исключение, и поскольку работа с исключениями сложнее по сравнению с простым if (t) , почему нормальный new T () не считается менее хорошей практикой, учитывая, что нам придется использовать try-catch () , чтобы проверить, удалось ли простое выделение памяти (и если у нас нет, просто смотрите, как умирает программа) ??

Каковы преимущества (если таковые имеются) обычного нового распределения по сравнению с использованием nothrow new ? Накладные расходы на исключение в этом случае незначительны?

Кроме того, предположим, что выделение не выполнено (например, в системе нет памяти). Может ли программа что-нибудь сделать в этой ситуации, или она просто завершится неудачно. Невозможно найти свободную память в куче, когда все зарезервировано, не так ли?

В случае сбоя выделения и std :: bad_alloc равно throw n, как мы можем предположить, что, поскольку памяти недостаточно для выделения объекта (например, new int ), памяти будет достаточно для хранения исключения ??

Спасибо за ваше время. Надеюсь, вопрос соответствует правилам.

9
задан 31 December 2010 в 18:23
поделиться