new delete operators c with examples
C ++のNew / Delete演算子に関するすべてを調べてください。
以前のチュートリアルで、C ++の変数と静的配列についてはすでに見てきました。
変数と配列に割り当てられるメモリに関する限り、データ型(変数の場合)と配列に提供されるディメンションに応じてコンパイラによって割り当てられるのは静的メモリです。
コンパイラによって割り当てられたメモリは、スタックに割り当てられます。しかし、ほとんどの場合、必要なメモリの正確な量を認識していない可能性があります。
=> ここで人気のあるC ++トレーニングシリーズを読んでください。
私たちが行うことは、必要なだけ、また必要なときに必要なだけのメモリを割り当てたり、割り当てを解除したりすることです。これは、メモリを動的に割り当てることによって行われます。静的割り当てとは対照的に、動的に割り当てられたメモリはヒープに割り当てられます。
動的メモリ割り当ては、コンパイラが割り当てたメモリでは実現できない可変サイズのメモリを割り当てることができるので便利です。必要なときにメモリを割り当てたり、不要なときに割り当てを解除したりする柔軟性があります。
ただし、これらの用途とは別に、動的に割り当てられたメモリの場合、メモリの割り当てを解除するのはユーザーの責任であることにも留意する必要があります。メモリの割り当てを解除するのを忘れると、メモリリークが発生し、プログラムが終了するまでメモリの割り当てが解除されません。
これにより、使用されるメモリが多すぎて、深刻なボトルネックが発生する可能性があります。
学習内容:
動的メモリ割り当て
C言語は、「malloc」、「calloc」、および「realloc」関数を使用して、メモリを動的に割り当てます。これらの関数で動的に割り当てられたメモリの割り当てを解除するには、「無料」の関数呼び出しを使用します。 C ++言語は、メモリの割り当て/割り当て解除を行うC言語のこれらの関数もサポートしています。
これらの関数とは別に、C ++では、動的メモリをより効率的に管理する2つの新しい演算子が導入されています。これらは、メモリを割り当てるための「新しい」演算子と、メモリの割り当てを解除するための「削除」演算子です。
このチュートリアルでは、C ++言語のnew演算子とdelete演算子について詳しく学習します。
「新しい」オペレーター
「new」演算子は、ヒープ上の変数またはその他のエンティティにメモリを割り当てます。
「new」演算子の一般的な構文は次のとおりです。
pointer_variable_of_data_type = new data type;
上記のデータ型は、C ++でサポートされている任意の有効なデータ型にすることができます。組み込みのデータ型でも、クラスや構造体を含む任意のユーザー定義のデータ型でもかまいません。
例えば、
自動テストスクリプトの書き方
int *ptr = NULL; ptr = new int();
上記の例では、整数へのポインタ変数「ptr」を宣言し、それをnullに初期化しました。次に、「new」演算子を使用して、「ptr」変数にメモリを割り当てます。ヒープでメモリが使用可能な場合、2番目のステートメントは成功します。使用可能なメモリがない場合、新しい演算子は「std :: bad_alloc」例外をスローします。
したがって、プログラムでこの変数またはエンティティを使用する前に、新しいオペレータによってメモリが正常に割り当てられているかどうかを確認することをお勧めします。
次のように、new演算子を使用して変数を初期化することもできます。
ptr = new int(10);
上記の例では、ポインタ変数「ptr」はnew演算子を使用して割り当てられたメモリであり、同時に割り当てられた値は10です。これはC ++での初期化のさらに別の方法です。
配列での「新しい」演算子の使用
「new」演算子のさらに別の使用法は、配列にメモリを割り当てることです。ここでは、配列に割り当てる要素の数を指定します。
「new」演算子を使用して配列要素を割り当てる例を以下に示します。
int* myarray = NULL; myarray = new int(10);
ここで、new演算子は、整数型の10個の連続要素をポインター変数myarrayに割り当て、ポインターをmyarrayの最初の要素に返します。
削除演算子
new演算子を使用して動的に割り当てられたメモリは、プログラマが明示的に解放する必要があります。この目的のために、「削除」演算子が用意されています。
削除演算子の一般的な構文は次のとおりです。
delete pointer_variable;
したがって、上記のptr変数に割り当てられたメモリを次のように解放できます。
delete ptr;
このステートメントは、変数「ptr」に割り当てられたメモリをメモリプールに解放します。
削除演算子を使用して、配列に割り当てられたメモリを解放することもできます。
例えば、上記の配列myarrayに割り当てられたメモリは、次のように解放できます。
delete() myarray;
削除演算子とともに使用される添え字演算子に注意してください。これは、要素の配列を割り当てたため、すべての場所を解放する必要があるためです。
代わりに、ステートメントを使用した場合、
delete myarray;
myarrayは配列の最初の要素を指していることがわかっているため、上記のステートメントは配列の最初の要素のみを削除します。下付き文字「()」を使用すると、メモリが解放されている変数が配列であり、割り当てられているすべてのメモリが解放されることを示します。
以下のプログラミング例は、C ++でのnew演算子とdelete演算子の使用法を示しています。
// Example program #include #include using namespace std; int main() { int *ptr = NULL; ptr = new int(); int *var = new int(12); if(!ptr) { cout<<'bad memory allocation'< 出力:
正常に割り当てられたメモリ
* ptr = 10
* var = 12
myarray値:1 2 3 4 5 6 7 8 9 10
同じもののスクリーンショットを以下に示します。
C ++でのマージソート
上記のコード例では、new演算子とdelete演算子の使用法を示しています。 「new」演算子を使用して、変数、配列にメモリを割り当て、別の変数を値で初期化しました。次に、削除演算子を使用してこれらのエンティティを削除します。
結論
これは、標準のデータ型に関する限り、C ++のnew演算子とdelete演算子に関するものです。クラスおよび構造体として、ユーザー定義のデータ型にnew演算子とdelete演算子を使用することもできます。
C ++を使用したオブジェクト指向プログラミングを学習するときに、オブジェクトを作成するためのこれらの演算子の使用法について詳しく学習します。
推奨読書