Будет использование нового (станд.:: nothrow) исключения маски, выданные от конструктора?

Также:

using(SomeObject object = new SomeObject()) 
{
  // do stuff with the object
}
// the object will be disposed of
10
задан tjd 9 December 2009 в 23:39
поделиться

3 ответа

Нет, не будет. nothrow применяется только к вызову new , но не к конструктору.

16
ответ дан 3 December 2019 в 14:24
поделиться

Конструктор Foo может по-прежнему генерировать исключения, и они будут пропадать.

Конструктор не вызывается до тех пор, пока не будет выделена память.

12
ответ дан 3 December 2019 в 14:24
поделиться

Я только что попробовал. Исключение проходит. Если вы запустите следующий код:

#include <new>

class Foo
{
public:
    Foo()
    {
        throw 42;
    }
};


int main()
{
    Foo* foo = new(std::nothrow) Foo;

    return 0;
}

, то получите следующий результат (в любом случае в Linux):

terminate called after throwing an instance of 'int'
Aborted

Итак,

6
ответ дан 3 December 2019 в 14:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: