オブジェクトのインスタンス化を理解する: 'new' の有無
プログラミングでオブジェクトを作成する場合、2 つのアプローチが現れます。キーワードを使用するか、それを使用せずにインスタンスを作成します。動的メモリ割り当てを超えて、重要な疑問が生じます: これら 2 つのメソッドには機能的な違いはありますか?
次のコード スニペットを調べてみましょう:
Time t (12, 0, 0); // t is a Time object Time* t = new Time(12, 0, 0); // t is a pointer to a dynamically allocated Time object
最初の行の 't ' 変数はローカル (通常はスタック上) に作成されます。これは、スコープが終了すると破棄される 'Time' オブジェクトのインスタンスを保持します。
対照的に、2 行目は、'new' 演算子を利用してメモリを動的に割り当て、そのブロック内の 'Time' オブジェクトを初期化します。したがって、変数 't' には、オブジェクト自体ではなく、動的に割り当てられたメモリのアドレスが格納されます。この動的割り当てはデフォルトでヒープ上で行われ、後で割り当てられたメモリを解放するには「delete」を使用する必要があります。
したがって、機能的な違いは、作成されたオブジェクトのスコープと有効期間にあります。最初のケースでは、オブジェクトはローカルであり、スコープの終了時に破棄されますが、2 番目のケースでは、オブジェクトは明示的に削除されるまで存在し続けます。
ヒープ上のスタックと動的オブジェクトは一般的な実装方法です。ただし、C 標準では、これらのオブジェクトは、メモリ内の物理的な位置ではなく、存続期間のみに基づいて定義されます。
以上がC でのオブジェクトのインスタンス化: `new` キーワード vs. 直接初期化?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。