C++2種類のメモリ割り当て方式の基礎


静的割当て:コンパイル時にプログラムソースコードを処理する際に割り当てる.
動的割当て:すなわち、プログラム実行時に実行時刻ライブラリ関数を呼び出して割り当てる.
静的メモリと動的メモリの2つの主な違い:
1、静的オブジェクトは名前のある変数で、私たちは直接それを操作します.動的オブジェクトは名前のない変数であり,ポインタによって間接的に操作する.
静的オブジェクト:
int ival = 123;

ダイナミックオブジェクト:
int *pint = new int(1024);
//  
int *pia = new int[4];

2、静的オブジェクトの割り当てと解放はコンパイラによって自動的に処理され、プログラマはそれを理解する必要があるが、何もする必要はない.逆に、ダイナミックオブジェクトの割り当てと解放は、プログラマが明示的に管理する必要があります.
動的オブジェクトの割り当てはnew式の2つのバージョンの1つで完了します.
特定のタイプの単一オブジェクトを割り当てる最初のバージョン.例:
int *pint = new int(1024);
上記の文は、名前のないintタイプのオブジェクトを割り当て、オブジェクトの初期値は1024であることを意味する.式は、メモリ内のオブジェクトのアドレスを返します.次に、このメモリアドレスはポインタオブジェクトpintを初期化するために使用される.動的に割り当てられたメモリに対して、ポインタを介して間接的にアクセスする唯一のアクセス方法です.
2番目のバージョンでは、特定のタイプと次元の配列を割り当てるために使用されます.例:
int *pia = new int[4];
上記の文は、4つの整形要素を含む配列を割り当てることを意味する.残念なことに、動的に割り当てられた配列の各値に初期値を明示的に指定することはできません.
動的配列を割り当てるときによく迷う問題は、戻り値がポインタにすぎず、単一のオブジェクトを割り当てる戻り値のタイプと同じであることです.例えば、piaとpintの違いは、piaが4つの要素配列を有する最初の要素のアドレスであり、pintは単一のオブジェクトを含む単純なアドレスにすぎないことである.
動的に割り当てられたオブジェクトまたはオブジェクトの配列が切れた場合は、メモリを明示的に解放する必要があります.delete式の2つのバージョンの1つを使用してこのことを完了することができ、解放後のメモリはプログラムで再使用することができます.
単一オブジェクトのdelete式:
delete pint;
オブジェクトの配列のdelete式:
delete [] pia;