ホームページ > バックエンド開発 > C++ > C で `new` 演算子を使用する (および使用しない) のはどのような場合ですか?

C で `new` 演算子を使用する (および使用しない) のはどのような場合ですか?

Susan Sarandon
リリース: 2024-12-04 12:48:11
オリジナル
569 人が閲覧しました

When Should I Use (and Avoid) the `new` Operator in C  ?

C で "new" を使用する場合と回避する場合

C でオブジェクトをインスタンス化する場合、"new" をいつ使用するかを理解することが重要です。 " 演算子とそうでない場合。この区別は、C# または Java から移行するプログラマーにとって特に重要です。

スコープが定義された変数には "new" を使用しないでください

オブジェクトをオブジェクト内にのみ存在させたい場合は、関数やループなどの特定のスコープでは、「new」を使用する必要はありません。代わりに、次の例のように、オブジェクトを直接宣言します。

void foo() {
  Point p = Point(0,0);
} // p is destroyed when foo() exits
ログイン後にコピー

有効期間が定義されていないオブジェクトには "new" を使用します

オブジェクトを残しておきたい場合は、明示的に削除されるまで存在する場合は、「new」を使用します。これは、次のような存続期間が未定のオブジェクトの場合に当てはまります。

  • オブジェクトを返す必要がある関数によって動的に割り当てられたオブジェクト。
  • カスタム アロケーターによって管理されるメモリ内に割り当てられたオブジェクト。
  • サイズが次のように決定される配列runtime.

例:

Point* p1 = new Point(0, 0); // Allocates p1 on the heap
...
delete p1; // Explicitly deallocates p1 when done
ログイン後にコピー

変数とポインターの違い

変数に "new" を使用する (Point* のように) p1 = new Point(0, 0);) は誤解を招く可能性があります。実際にはオブジェクトをヒープに割り当てません。代わりに、オブジェクトへのポインタを割り当てます。オブジェクト自体はインプレースに割り当てられたままになります。これは、クラス内でメンバー変数を作成する場合にのみ表示されます。

クラス メンバーのインプレース割り当て

クラス インスタンスの作成時に、クラス メンバーは自動的に割り当てられます。これは「インプレース」割り当てとして知られています。例:

class Foo {
  Point p;
}; // p is allocated within Foo objects
ログイン後にコピー

パフォーマンスに関する考慮事項

「new」を使用してオブジェクトを割り当てると、インプレース割り当てよりもコストが高くなります。パフォーマンスを最適化するために、その使用を最小限に抑えることをお勧めします。

結論

C でメモリを効果的に管理するには、「new」をいつ使用するか、いつ使用しないかを理解することが重要です。これらのガイドラインに従うことで、メモリ リークやパフォーマンスの問題を回避し、コードの安定性と効率を確保できます。

以上がC で `new` 演算子を使用する (および使用しない) のはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート