8.83 --force_new_nothrow、--no_force_new_nothrow

new 式の動作を C++ で制御します。

C++ 標準では、throw() と共に宣言されている no throw 形式の operator new だけが 失敗したときに NULL を返すことができます。それ以外の operator new は決して NULL を返すことはできません。デフォルトの operator new でも、失敗すると例外がスローされます。
--force_new_nothrow を使用すると、コンパイラは グローバルの ::operator new::operator new[] を使用する new T(...args...) などの式を new (std::nothrow) T(...args...) と同じように処理します。
また --force_new_nothrow を使用すると、クラス固有の operator new や、オーバーロードしたグローバルの operator new が、no throw として処理されます。

オプション --force_new_nothrow は、C++ 標準に準拠していない従来のソースコードを移行する目的でのみ提供されています。他の目的でこのオプションを使用することはお勧めしません。

モード

このオプションは、ソース言語が C++ の場合にのみ有効です。

デフォルト

デフォルトは --no_force_new_nothrow です。

struct S
{
    void* operator new(std::size_t);
    void* operator new[](std::size_t);
};
void *operator new(std::size_t, int);
--force_new_nothrow オプションが有効な場合、上記のコードは以下のコードとして処理されます。
struct S
{
    void* operator new(std::size_t) throw();
    void* operator new[](std::size_t) throw();
};
void *operator new(std::size_t, int) throw();
関連する参考文書
11.5 ARM C++ での ::operator new 関数の使用
非機密扱いPDF file icon PDF 版ARM DUI0472LJ
Copyright © 2010-2015 ARM.All rights reserved.