Skip to content

Latest commit

 

History

History
62 lines (46 loc) · 1.5 KB

set_new_handler.md

File metadata and controls

62 lines (46 loc) · 1.5 KB

set_new_handler

  • new[meta header]
  • std[meta namespace]
  • function[meta id-type]
namespace std {
  new_handler set_new_handler(new_handler new_p) noexcept;
}
  • new_handler[link new_handler.md]

概要

new失敗時に呼ばれる関数を設定する。

new失敗時にはデフォルトでbad_alloc例外が投げられるが、この関数を使用することでnew失敗時の挙動を切り替えられる。

効果

new_p関数を、new失敗時に呼ばれる関数として設定する。

パラメータとしてヌルポインタが渡された場合、初期のハンドラが設定される。

戻り値

この関数が呼ばれる前に設定されていた関数を返す

#include <iostream>
#include <new>
#include <limits>
#include <cstdlib>

void on_new_failed()
{
  // エラー理由を出力し、プログラムを異常終了させる
  std::cout << "メモリ確保に失敗した" << std::endl;
  std::abort();
}

int main()
{
  // new失敗時の動作をカスタマイズ
  std::set_new_handler(on_new_failed);

  int* p = new int[std::numeric_limits<std::size_t>::max()];
}
  • std::set_new_handler[color ff0000]
  • max()[link /reference/limits/numeric_limits/max.md]
  • std::abort()[link /reference/cstdlib/abort.md]

出力例

メモリ確保に失敗した

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.</span>