2

無向グラフを表す単純なクラスを作成します。動的に割り当てられたセットの配列へのポインターであるプライベート クラス メンバーが必要です。配列内のすべてのセットは、対応する配列インデックス番号を持つ頂点に隣接する頂点を表します。また、2 つのコンストラクターがあります。1 つはパラメーターとして配列サイズ (頂点数) を取得し、2 つ目はファイルから読み取ります。boost::shared_ptr を使用して、割り当てられたメモリを管理したいと考えています。ブーストのドキュメントには次のように記載されています。

Boost リリース 1.53 以降では、shared_ptr を使用して、動的に割り当てられた配列へのポインターを保持できます。

クラス メンバーと 2 つのコンストラクターを作成しました。

boost::shared_ptr<std::set<int>[]> adj;
...
Graph(unsigned int vertices);
Graph(std::ifstream& inputStream); // read 

私のshared_ptrを初期化する方法、最初のコンストラクターで初期化リストを使用します:

Graph::Graph(unsigned int vertices)
        :adj(new std::set<int>[vertices]),
        vertexCount(vertices){
}

動的に割り当てられた配列の初期化を適切に処理する shared_ptr ですか? 2番目のコンストラクターの本体内でサイズを受け取ったときにshared_ptrを初期化する方法を教えてください?

Graph::Graph(std::ifstream& inputStream){
        inputStream >> std::dec >> vertexCount; // read vertex count from file
        // how to init shared_ptr with vertexCount array size?            
        }

私はもっ​​とうまくやれるだろうか?

4

2 に答える 2