オブジェクトのインスタンス化: New の有無にかかわらず
C でオブジェクトを作成する場合、プログラマは「new」演算子を使用するか、オブジェクトを直接インスタンス化できます。それなしで。どちらの方法でもオブジェクトを作成しますが、いくつかの重要な点で異なります。
New なし
「new」なしでオブジェクトをインスタンス化すると、現在のスコープ内でそのオブジェクト用のメモリが直接予約されます。これは通常、スタック上で実行され、オブジェクトの有効期間が自動的に設定されます。オブジェクトは、定義されたスコープ内で自動的に作成および破棄されます。
例:
Time t(12, 0, 0); // t is a Time object
上記のコードでは、「Time」オブジェクト "t" がスタック上に作成され、その有効期間は現在のスコープにバインドされています。
New の場合
「new」を使用してオブジェクトをインスタンス化すると、ヒープ上にそのオブジェクトのメモリが動的に割り当てられます。これにより、オブジェクトの有効期間が終了したときにオブジェクトを明示的に作成および破棄できるようになります。ポインタ「t」には、オブジェクトのヒープ アドレスが格納されます。
例:
Time* t = new Time(12, 0, 0); // t is a pointer to a dynamically allocated Time object
ここで、ポインタ "t" には新しく作成された "Time" オブジェクトのヒープ アドレスが割り当てられます。オブジェクトの有効期間はスコープとは独立しており、「delete」演算子を使用してメモリを解放するまで存続します。
主な違い
C 標準ではスタックとヒープの動作が明示的に定義されていないため、これらの違いは実装固有であることに注意することが重要です。ただし、ほとんどの実際の実装では、自動オブジェクトにはスタック メモリが使用され、動的オブジェクトにはヒープ メモリが使用されます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3