初めに
演算子オーバーロードのdelete[]とはなにか。
演算子オーバーロードとは
標準/ユーザ定義のクラスや構造体に対して、演算子の動作をオーバーロードできる。
ClassName operator=(argument);
上記のように記述できる。
オーバーロードなので新しい演算子は定義できない。
演算子オーバーロードは通常のメンバ関数と同様に扱われ、メンバ関数として定義された場合は継承される
friendで宣言することで、そのクラスのメンバでなくてもprivate/protectedメンバ変数にアクセスできる。
オーバーロードできる演算子一覧
B: バイナリ演算子
U: 単項演算子
| operator | タイプ |
|---|---|
| , | B |
| ! | U |
| != | B |
| % | B |
| %= | B |
| & | B |
| & | U |
| && | B |
| &= | B |
| () | - |
| () | U |
| * | B |
| * | U |
| *= | B |
| + | B |
| + | U |
| ++ | U |
| += | B |
| - | B |
| - | U |
| -- | U |
| -= | B |
| -> | B |
| ->* | B |
| / | B |
| /= | B |
| < | B |
| << | B |
| <<= | B |
| <= | B |
| = | B |
| == | B |
| > | B |
| >= | B |
| >> | B |
| >>= | B |
| [] | - |
| ^ | B |
| ^= | B |
| | | B |
| |= | B |
| || | B |
| ~ | U |
| delete | - |
| new | - |
オーバーロード不可能な演算子一覧
| operator | 名前 |
|---|---|
| . | メンバー選択 |
| .* | メンバーへのポインタ選択 |
| :: | スコープ解決 |
| ?: | 条件 |
| # | プリプロセッサによる文字列への変換 |
| ## | プリプロセッサによる連結 |
delete[]とは
operator new / operator delete
operator new[] / operator delete[]
はメモリ確保・解放の挙動をカスタマイズするためにオーバーロードできる。
delete[]はnew[]で動的に確保した配列のメモリを開放するための演算子。
deleteは単一オブジェクト(配列の先頭)のディストラクタを呼ぶ。
delete[]は配列の各要素に対してディストラクタを呼ぶ。
参考文献
- C++演算子オーバーロード大全-@rinse
https://qiita.com/rinse_/items/9d87d5cb0dc1e89d005e - Operator overloading|Microsoft learn
https://learn.microsoft.com/en-gb/cpp/cpp/operator-overloading?view=msvc-170 - operator overloading - cppreference
https://en.cppreference.com/w/cpp/language/operators.html - プログラミングメモ日記C++ の delete と delete[] の違い
http://qwertyfk.blog16.fc2.com/blog-entry-101.html