SYSU プログラミング C++ (第 5 週) キーワードの新規作成と削除、変数/配列の動的作成、メモリ リーク、デフォルト

new および delete キーワード: (文字列配列を動的に作成します)

変数を動的に作成します。

配列を動的に作成します。

2 次元配列を動的に作成します。

新しい概要:

1. ポインタ = 新しい型名; // オブジェクトを動的に作成します
2. ポインタ = 新しい型名 (初期化パラメータ); // 初期化せずにオブジェクトを動的に作成します 3. ポインタ = 新しい型名
[配列の長さ] {初期化リスト}; // 配列の動的割り当てに使用され、初期化リストはありません (文字列型には必須)

◼ タイプは、基本タイプまたはクラス タイプです。
        • クラス型の場合、初期化パラメータはクラスのコンストラクタに実際のパラメータを渡すことと同じです
◼ 新しい操作は、割り当てられたメモリ空間を指すこの型のポインタを返します
◼メモリの割り当てが失敗した場合は、 NULL を返す代わりに例外がスローされてプログラムを終了します

削除概要:

1.delete 変数名; //基本的な使い方
2.delete [] 変数名; //配列を解放するために使用

◼ 配列が動的に割り当てられているが、[ ] ではなく delete p によって解放された場合、
        •コンパイル時には問題がなく、通常は実行時にエラーも発生しません。
        • しかし、実際には動的に割り当てられた配列は完全には解放されません。
◼ delete は、ポインタが指すオブジェクトが占有しているメモリを解放します。
        • オブジェクト ポインタを削除すると、オブジェクトのデストラクタが呼び出されます。([ ] を指定すると、その中のすべての要素がそれぞれのデストラクタを呼び出します)
        • delete で空間を解放した後、ポインタの値は元のアドレスのままですが、ポインタは無効になります (解放を繰り返すとエラー、つまり不正なポインタ アクセスが発生します)。

delete自体はオブジェクトが空であるかどうかを自動的にチェックし、空の場合は何も実行されないため、nullポインタの削除には特別な判断は必要ありません

◼ 繰り返しの削除エラーを防ぐために、削除後にポインタを null に割り当てることが最善です。

メモリーリーク:

newへのポインタが失われ、占有されていたメモリが解放されなくなります。

 明示的にデフォルトの関数定義 = デフォルト

関数宣言の後に =default を追加して関数をデフォルト関数として宣言するだけで、コンパイラは明示的に宣言されたデフォルト関数の関数本体を自動的に生成します
• =default で宣言されている場合、関数を作成および実装することはできません。 • この関数は、         デフォルト コンストラクタ、         デストラクタ、コピー コンストラクタ         など
の特別なメンバ関数のデフォルトの引数なしでのみ使用できます。


例: (パラメータがある場合は前のパラメータを使用し、パラメータがない場合はデフォルトを使用します。現時点では A() の実装を記述することはできません)

おすすめ

転載: blog.csdn.net/jz_terry/article/details/129731069