C++教科書/標準ライブラリ編/<new>の章
編集はじめに
編集<new>
ヘッダーは C++ の標準ライブラリの一部であり、メモリ管理のための低レベルな機能を提供します。主に、プログラムの実行中にメモリを動的に割り当てたり解放したりするための仕組みを扱います。
ヘッダーの内容
編集<new>
ヘッダーには以下のようなものが含まれています。
- クラス
-
bad_alloc
- メモリ割り当てが失敗したときにスローされる例外
bad_array_new_length
(C++11 以降)- 無効なサイズで配列を割り当てようとするとスローされる例外
align_val_t
(C++17 以降)- 整列アライメントを指定するために使用する型
- 列挙型
-
new_handler
- 新しいメモリ割り当て処理を設定するための関数ポインタ型
- タグ
-
nothrow_t
- メモリ割り当ての際に例外をスローしないことを指定するためのタグ
destroying_delete_t
(C++20 以降)operator delete
の破壊的削除オーバーロードを選択するためのタグ
- 定数
-
hardware_destructive_interference_size
(C++17 以降)- ハードウェアによる偽の共有 (false sharing) を回避するための最小オフセット値
hardware_constructive_interference_size
(C++17 以降)- ハードウェアによる真の共有 (true sharing) を促進するための最大オフセット値
- 関数
-
operator new
/operator new[]
- メモリを割り当てるための演算子
operator delete
/operator delete[]
- メモリを解放するための演算子
get_new_handler
(C++11 以降)- 現在設定されている new ハンドラーを取得する関数
set_new_handler
- 新しい new ハンドラーを設定する関数
launder
(C++17 以降)- ポインタの最適化のためのバリア関数 (テンプレート)
機能の詳細
編集<new>
ヘッダーの主な機能はメモリ割り当てと解放です。プログラムは operator new
を使ってメモリを割り当て、 operator delete
を使って解放します。これらの演算子はいくつかのバリエーションを持ち、メモリサイズやアライメント (境界揃え) 、例外の有無などを指定できます。
また、<new>
ヘッダーは以下のような機能も提供します。
- new ハンドラー
- メモリ割り当てに失敗した場合に呼び出される関数を設定できます。
- アライメント
- メモリを特定の境界に合わせて割り当てることができます。
- nothrow メモリ割り当て
- メモリ割り当てが失敗しても例外をスローせずに
nullptr
を返すようにすることができます。 - ハードウェアによるメモリ干渉
- ハードウェアアーキテクチャに依存したメモリアクセス特性を利用して、パフォーマンスを向上させることができます。
注意点
編集<new>
ヘッダーを使う際には、メモリ管理を正しく行うことが重要です。メモリを割り当てたら、必ず解放するようにし、メモリリーク (解放されずに残ったメモリ) を避けるように注意が必要です。また、プログラムがメモリ不足になったときに予期しない動作を起こす可能性があるため、適切なエラーハンドリングを行うようにしましょう。