ホームページ >バックエンド開発 >C#.Net チュートリアル >C++ レビューの要点のまとめ パート 4: New と delete の使用
オブジェクトの動的な作成と解放
1 newとdeleteの基本構文
1) ソフトウェア開発の過程では、動的リンクリストへのノードの挿入や削除など、メモリ空間の動的割り当てやキャンセルが必要になることがよくあります。 。 C 言語では、ライブラリ関数 malloc および free を使用してメモリ領域の割り当てと割り当て解除を行います。 C++ は、malloc 関数と free 関数を置き換える、よりシンプルで強力な演算子 new および delete を提供します。
注: new と delete は関数ではなく演算子であるため、実行は効率的です。
2) C++ は C 言語との互換性を保つために malloc 関数と free 関数を保持していますが、ユーザーは malloc 関数と free 関数の代わりに new 演算子と delete 演算子を使用することをお勧めします。 new 演算子の例:
new int; //开辟一个存放整数的存储空间,返回一个指向该存储空间的地址(即指针) new int(100); //开辟一个存放整数的空间,并指定该整数的初值为100,返回一个指向该存储空间的地址 new char[10]; //开辟一个存放字符数组(包括10个元素)的空间,返回首元素的地址 new int[5][4]; //开辟一个存放二维整型数组(大小为5*4)的空间,返回首元素的地址 float *p=new float (3.14159); //开辟一个存放单精度数的空间,并指定该实数的初值为//3.14159,将返回的该空间的地址赋给指针变量p
new で配列領域を割り当てる場合、初期値を指定することはできません。メモリ不足などの理由でスペースが正常に割り当てられない場合、new はヌルポインタ NULL を返し、ユーザーはポインタの値に基づいてスペース割り当てが成功したかどうかを判断できます。
アプリケーション例
2 クラスオブジェクトの動的作成と解放
クラス名を使用して定義されたオブジェクトは、プログラムの実行中、オブジェクトによって占有されているスペースをいつでも解放することはできません。しかし、必要なときにオブジェクトを作成し、不要になったらオブジェクトを破棄し、オブジェクトが占有しているメモリ領域を他のデータのために解放したい場合があります。これにより、メモリ空間の使用率が向上します。
C++ では、new 演算子を使用してオブジェクトを動的に作成し、delete 演算子を使用してオブジェクトをキャンセルできます
例:
Box *pt //Box クラス オブジェクトを指すポインター変数 pt を定義します
;
pt=new Box; / /新しいオブジェクトの開始アドレスは pt に格納されます
新しく作成されたオブジェクトには、プログラム内で pt を介してアクセスできます。
coutheight; //オブジェクトの高さのメンバーを出力します
coutvolume( ); //計算して出力するオブジェクトのボリューム関数を呼び出しますボリューム
C++ では、new の実行時に新しく作成されたオブジェクトを初期化することもできます。例えば、
Box *pt=new Box(12,15,18);
この書き方は、上記の2つのステートメント(ポインタ変数の定義とnewによる新しいオブジェクトの作成)を1つのステートメントにまとめ、初期値を指定します。価値。こちらの方がより洗練されています。
新しいオブジェクトの高さ、幅、長さはそれぞれ初期値 12、15、18 を取得します。オブジェクトは、オブジェクト名またはポインターによって呼び出すことができます。
new 操作を実行するときに、メモリの量が不十分で必要なメモリ空間を開くことができない場合、現在のほとんどの C++ コンパイル システムでは new が 0 ポインタ値を返します。戻り値が0かどうかを確認すれば、メモリ割り当てが成功したかどうかを判断できます。
ANSI C++ 標準では、new の実行中に障害が発生した場合、「例外」が「スロー」され、ユーザーは例外に基づいて関連する処理を実行できることが提案されています。ただし、C++ 標準では、新しい障害が発生したときにポインター値 0 を返すことが依然として許可されています。現在、さまざまなコンパイル システムがさまざまな方法で新しいエラーを処理します。
new で作成したオブジェクトが不要になった場合は、delete 演算子を使用して解放できます。
delete pt; //ptが指すメモリ空間を解放する
これにより、ptが指すオブジェクトがキャンセルされます。その後、プログラムはオブジェクトを使用できなくなります。
ポインター変数 pt を使用して、異なる動的オブジェクトを次々に指す場合は、間違ったオブジェクトを削除しないように、ポインター変数の現在のポインターに注意を払う必要があります。 delete オペレーターが実行されると、デストラクターが自動的に呼び出され、メモリー空間を解放する前にクリーンアップ作業を完了します。
3 new と malloc の詳細な分析
混合テスト、類似点と相違点の比較
結論: malloc はクラスのコンストラクターを呼び出しません
Free はクラスのデストラクターを呼び出しません
上記は C++ レビューの重要なポイントです 要約 4: New と delete で使用されるコンテンツ その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。