重複の可能性:
new を使用したオブジェクトのインスタンス化とそれを使用しないオブジェクトのインスタンス化の違いは何ですか? オブジェクト
の作成: `new` を使用する場合と使用しない場合
これら2つのステートメントの違いは何ですか
HttpUtil httpUtil;
と
HttpUtil *net = new HttpUtil();
使い勝手が良いのはどっち?
重複の可能性:
new を使用したオブジェクトのインスタンス化とそれを使用しないオブジェクトのインスタンス化の違いは何ですか? オブジェクト
の作成: `new` を使用する場合と使用しない場合
これら2つのステートメントの違いは何ですか
HttpUtil httpUtil;
と
HttpUtil *net = new HttpUtil();
使い勝手が良いのはどっち?
1 つ目は、自動変数を作成します。メモリ管理は自動で、割り当てはスタック上にあるため高速で、メモリ リークの可能性はありません。
2 番目のバージョンは動的変数を作成します。メモリをクリーンアップする必要があり、ヒープでの割り当てが遅くなります。
常に最初のものを優先します。動的割り当てを使用する必要がある場合 (永続的な有効期間またはポリモーフィック動作のために)、生のポインターではなくスマート ポインターを使用します。
最初のステートメントはhttpUtil
、「スタック」で呼び出される変数を作成します。これは、その行を含む関数が終了するとすぐに、変数が「範囲外」になり、解放されることを意味します (変数が使用するメモリは、他のものに自由に使用できるようになります) )。
2 番目のステートメントは、「ヒープ」上に変数を作成します。これは、変数が呼び出されるまで、変数がメモリ内に残ることを意味しますdelete
。delete
ヒープに変数を割り当てるときは、ある時点で常にそれを行うようにする必要があります。そうしないと、メモリ リークが発生します。*net
変数が表示されなくなりますが、メモリはまだ割り当てられています。
1 つ目は静的に作成されたオブジェクトで、その破壊について心配する必要はありません。後の 1 つは動的に作成されたオブジェクトで、アプリケーションが終了する前にその破棄を処理する必要があります。
最初のものは、メモリ管理について心配する必要がない場合に推奨されます。