Cplusplus-cpp-dynamic-memory
C ++ダイナミックメモリ
C で動的メモリが実際にどのように機能するかをよく理解することは、優れたC プログラマになるために不可欠です。 C ++プログラムのメモリは2つの部分に分かれています-
- スタック-関数内で宣言されたすべての変数は、スタックからメモリを占有します。
- ヒープ-これはプログラムの未使用メモリであり、プログラムの実行時にメモリを動的に割り当てるために使用できます。
多くの場合、定義済み変数に特定の情報を格納するために必要なメモリの量を事前に認識しておらず、必要なメモリのサイズは実行時に決定できます。
割り当てられたスペースのアドレスを返すC ++の特別な演算子を使用して、特定のタイプの変数のヒープ内で実行時にメモリを割り当てることができます。 この演算子は new 演算子と呼ばれます。
動的に割り当てられたメモリがもう必要ない場合は、 delete 演算子を使用できます。これは、新しい演算子によって以前に割り当てられたメモリの割り当てを解除します。
新規および削除演算子
ここで、 data-type は、配列を含む組み込みデータ型、またはクラスまたは構造を含むユーザー定義のデータ型です。 組み込みのデータ型から始めましょう。 たとえば、double型へのポインターを定義し、実行時にメモリを割り当てるように要求できます。 私たちは次のステートメントで*新しい*演算子を使用してこれを行うことができます-
空きストアが使い果たされた場合、メモリは正常に割り当てられなかった可能性があります。 だから、新しい演算子がNULLポインタを返しているかどうかを確認し、以下のように適切なアクションを取ることは良い習慣です-
Cの* malloc()*関数はまだC に存在しますが、malloc()関数の使用を避けることをお勧めします。 malloc()に対するnewの主な利点は、newがメモリを割り当てるだけでなく、C の主要な目的であるオブジェクトを構築することです。
動的に割り当てられた変数が不要になったと感じるときはいつでも、次のように「削除」演算子を使用して、フリーストアで占有しているメモリを解放できます-
上記の概念を入れて、「新規」と「削除」がどのように機能するかを示すために次の例を形成しましょう-
上記のコードをコンパイルして実行すると、次の結果が生成されます-
配列の動的メモリ割り当て
文字の配列、つまり20文字の文字列にメモリを割り当てることを検討してください。 上記で使用したものと同じ構文を使用して、以下に示すようにメモリを動的に割り当てることができます。
作成したばかりの配列を削除するには、ステートメントは次のようになります-
new演算子の同様の一般的な構文に従って、次のように多次元配列に割り当てることができます-
ただし、多次元配列のメモリを解放する構文は上記と同じままです-
オブジェクトの動的メモリ割り当て
オブジェクトは単純なデータ型と変わりません。 たとえば、概念を明確にするためにオブジェクトの配列を使用する予定の次のコードを検討してください-
4つのBoxオブジェクトの配列を割り当てると、Simpleコンストラクターが4回呼び出され、同様にこれらのオブジェクトを削除するときに、デストラクターも同じ回数呼び出されます。
上記のコードをコンパイルして実行すると、次の結果が生成されます-