Также:
using(SomeObject object = new SomeObject())
{
// do stuff with the object
}
// the object will be disposed of
Нет, не будет. nothrow
применяется только к вызову new
, но не к конструктору.
Конструктор Foo
может по-прежнему генерировать исключения, и они будут пропадать.
Конструктор не вызывается до тех пор, пока не будет выделена память.
Я только что попробовал. Исключение проходит. Если вы запустите следующий код:
#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
Итак,