web-dev-qa-db-ja.com

C ++プログラマーはどのC ++イディオムを使用する必要がありますか?

C++プログラマーが知っておくべきC++イディオムは何ですか?

C++イディオムとは、C++にのみ適用できる、または他のほとんどの言語よりもC++に適用できる特定のことを行うためのデザインパターンまたは方法を意味します。

なぜイディオムを使用する必要があり、イディオムは何を達成するのですか?

46
Partial

これが1つです リスト 。いくつか選ぶ必要がある場合は、不思議なことに繰り返されるテンプレートパターンまたは仮想コンストラクターを使用する可能性があります。

28
Duck

C++に(ほぼ)固有であることを学び、知るための最も重要な「パターン」は、 [〜#〜] raii [〜#〜] (リソースの取得は初期化です)です。

編集:(質問に編集された追加の質問に回答するため)。 RAIIは、主にリソース管理を(半)自動化するために使用します。最も明白な使用法は、メモリの解放やファイルのクローズなど、所有オブジェクトがスコープ外になったときにオブジェクトが所有するリソースを解放することです。

55
Jerry Coffin

PIMPL、別名[〜#〜] p [〜#〜] ointer to [〜#〜] impl [〜#〜] ementation?

11
Dmitry

テンプレートメタプログラミング。基本的にコンパイル時のダックタイピングであるため、静的タイピングの速度でダックタイピングの柔軟性のほとんどを得ることができます。

8
dsimcha

STLを最大限に活用したい場合は、イテレーターと関数/関数オブジェクトが不可欠なイディオムです。イテレータの使用も、暗黙的に「ハーフオープンレンジ」イディオムに依存しています。

7
the_mandrill

強い型付けとconstの正確さを利用することも非常に役立ちます。

また、デフォルトのコピーコンストラクターと代入演算子も禁止しています。私は実際にはそれを超えていますが、それらが最も一般的です。暗示的でなければ人生は楽になると思います。

6
justin

RAII、COW、pimpl、デメテルの法則(イディオムとして分類できるかどうかはわかりません)、タイプの特性とポリシー。 (ただし、COWとデメテルの法則はC++に限定されません)

5
BostonLogan