オブジェクトのインスタンス化: New の有無にかかわらず
C でオブジェクトを作成する場合、プログラマは「new」演算子を使用するか、オブジェクトを直接インスタンス化できます。それなしで。どちらの方法でもオブジェクトを作成しますが、いくつかの重要な点で異なります。
Without New
「new」なしでオブジェクトをインスタンス化すると、現在のスコープ内でそのオブジェクト用のメモリが直接予約されます。これは通常、スタック上で実行され、オブジェクトの有効期間が自動的に設定されます。オブジェクトは、定義されたスコープ内で自動的に作成および破棄されます。
例:
Time t(12, 0, 0); // t is a Time object
上記のコードでは、「Time」オブジェクト「t」がスタック上に作成されます。そしてその有効期間は現在のスコープにバインドされています。
With New
Usingオブジェクトをインスタンス化する「new」は、そのオブジェクトにヒープ上でメモリを動的に割り当てます。これにより、オブジェクトの有効期間が終了したときにオブジェクトを明示的に作成および破棄できるようになります。ポインタ "t" には、オブジェクトのヒープ アドレスが格納されます。
例:
Time* t = new Time(12, 0, 0); // t is a pointer to a dynamically allocated Time object
ここでは、ポインタ "t" には、新しく作成された "Time" のヒープ アドレスが割り当てられます。物体。オブジェクトの有効期間はスコープとは独立しており、「delete」演算子を使用してメモリを解放するまで存続します。
主な違い
C 標準ではスタックとヒープの動作が明示的に定義されていないため、これらの違いは実装固有であることに注意することが重要です。ただし、ほとんどの実際の実装では、自動オブジェクトにはスタック メモリが使用され、動的オブジェクトにはヒープ メモリが使用されます。
以上がC オブジェクトのインスタンス化: スタックとヒープ: 「新しい」か「新しい」ではないか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。