std:: set_new_handler
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Functions | ||||
|
(C++11)
|
||||
|
set_new_handler
|
||||
| Classes | ||||
|
(C++11)
|
||||
|
(C++17)
|
||||
| Types | ||||
| Objects | ||||
|
(C++20)
|
||||
| Object access | ||||
|
(C++17)
|
|
定義先ヘッダ
<new>
|
||
|
std::
new_handler
set_new_handler
(
std::
new_handler
new_p
)
throw
(
)
;
|
(C++11まで) | |
|
std::
new_handler
set_new_handler
(
std::
new_handler
new_p
)
noexcept
;
|
(C++11以降) | |
new_p を新しいグローバル new-handler 関数として設定し、以前にインストールされていた new-handler を返します。
new-handler 関数は、メモリ割り当ての試行が失敗した際に 割り当て関数 によって呼び出される関数です。その目的は、以下の3つのいずれかです:
デフォルトの実装は std::bad_alloc を送出します。ユーザーは独自の new-handler を設定することができ、これはデフォルトの動作とは異なる挙動を提供する可能性があります。
new-handler が戻った場合、アロケーション関数は以前失敗したアロケーション試行を繰り返し、アロケーションが再び失敗した場合は再度 new-handler を呼び出します。このループを終了するために、 new-handler は std :: set_new_handler ( nullptr ) を呼び出すことができます:アロケーション失敗後、アロケーション関数が std::get_new_handler がヌルポインタ値を返すことを検出した場合、 std::bad_alloc をスローします。
プログラム起動時、 new-handler はヌルポインタです。
|
この関数はスレッドセーフです。
|
(C++11以降) |
目次 |
パラメータ
| new_p | - | std::new_handler 型の関数へのポインタ、またはヌルポインタ |
戻り値
以前にインストールされていた new ハンドラ、またはインストールされていない場合は null ポインタ値。
例
#include <iostream> #include <new> void handler() { std::cout << "Memory allocation failed, terminating\n"; std::set_new_handler(nullptr); } int main() { std::set_new_handler(handler); try { while (true) { new int[1000'000'000ul](); } } catch (const std::bad_alloc& e) { std::cout << e.what() << '\n'; } }
出力例:
Memory allocation failed, terminating std::bad_alloc
関連項目
|
メモリ確保関数
(関数) |
|
|
(C++11)
|
現在のnewハンドラを取得する
(関数) |
|
newハンドラの関数ポインタ型
(typedef) |
|
|
メモリ確保失敗時にスローされる例外
(クラス) |