動的確保されたメモリの管理
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/07/14 06:48 UTC 版)
「RAII」の記事における「動的確保されたメモリの管理」の解説
単純な例として、関数内で一時的な作業領域として配列を動的確保することを考える。単純な方法では、以下のようにnew[]演算子を使用する。 void function1A(size_t count) { double* array1 = NULL; double* array2 = NULL; try { // 配列を動的に確保する。メモリ確保失敗により std::bad_alloc 例外がスローされる可能性がある。 array1 = new double[count](); array2 = new double[count](); // 動的に確保した配列をここで作業領域として使用する。 for (size_t i = 0; i < count; ++i) { array1[i] = i * 0.1; array2[i] = i * 0.1; } // ... // 配列を使わなくなったので削除する。 delete[] array2; delete[] array1; } catch (...) { // 例外がスローされる場合に備える。 delete[] array2; delete[] array1; throw; // 例外の再送出。 }} これはC言語のmallocおよびfree関数による原始的な寿命管理手法に近い。もし動的に確保したメモリを削除する前に関数を抜けるとメモリリークしてしまうため、慎重に削除処理をひとつひとつ記述していく必要がある。動的にメモリ管理するオブジェクトの数が増えるにつれ、ソースコードのメンテナンスコストは増大していく。 一方、RAIIを利用した場合は以下のようになる。 // RAII を実現する配列ラッパークラス。template
※この「動的確保されたメモリの管理」の解説は、「RAII」の解説の一部です。
「動的確保されたメモリの管理」を含む「RAII」の記事については、「RAII」の概要を参照ください。
- 動的確保されたメモリの管理のページへのリンク