3

C ++で複雑なデータ構造を実装する必要がある場合に採用するソリューションは何ですか?つまり、他のオブジェクトによって参照され、同時に他のオブジェクトを参照する必要があるさまざまな種類のオブジェクトを意味します。これは、利用可能な標準ライブラリコンテナとは実際には異なります。

コードを非常にC++にして、ジェネリックプログラミング(コンテナースタイルテンプレート)を使用しようとしていますか?私見ですが、実装が難しく不便であり、コードの理解や操作が難しくなる可能性があります。さらに、どのような種類のイテレータを実装していますか?

それとも、その一方で、「Cスタイルのコード」になってしまうのでしょうか。つまり、各クラスで、適切なデータ構造を構築するために、他のオブジェクトを参照するメンバー変数としていくつかのポインターを実装します。

あなたの経験によると、これら2つのアプローチの長所と短所は何ですか?他の解決策はありますか?

4

1 に答える 1

2

C++で複雑なデータ構造を作成するときに従うガイドラインがいくつかあります。

  1. 生のポインタは避けてください。スマートポインタを使用します。
  2. データ構造が循環的であるか非循環的であるかを早期に把握するようにしてください。データ構造にサイクルがある場合、リークを作成せずにどこでもshare_ptrを使用することはできません。循環構造のある時点で、weak_ptrを使用して循環を中断し、オブジェクトを解放できるようにします。
  3. オブジェクトが他のオブジェクトを保持し、それをコンテナにしたい場合は、必要なときに適切なイテレータを実装します。1秒前ではありません。コンテナでSTLアルゴリズムの1つを使用する場合は、通常、イテレータのサポートが必要です。もちろん、(名前付けやセマンティクスの点で)STLと一致しないイテレーターを自分で使用するために実装することもできますが、コードで何かを行うためのさらに別の方法を追加しました。私はそれを避けようとします。
  4. クラスがさまざまなタイプを保持することを目的としている場合は、テンプレートを使用してそれを表現します。これをCで行う方法はありますが(memcpyなどを使用)、最終的に得られるコードはCコーダーにとってより理解しやすくなりますが、C ++の利点のほとんど(型の安全性、割り当て演算子など)が失われます。 )。
于 2013-03-24T15:30:55.097 に答える