3

レモングラフライブラリのグラフ型変数にshared_ptrを割り当てるために、私はこれをしました:

typedef ListDigraph Graph;
typedef std::shared_ptr<Graph> Process_pointer;
Process_pointer process(new Graph);

正常に機能しましたが、マップ オブジェクトの shared_ptr を宣言する必要があります。通常、マップ オブジェクトは次のように機能します。

Graph process;
typedef ListDigraph::NodeMap<string> Node_names;
Node_names name(process);

つまり、 name には、デフォルト コンストラクターの Graph オブジェクトが必要です。

それに対してshared_ptrを宣言するために、私はこれをしました:

typedef ListDigraph::NodeMap<string> Node_names;
typedef std::shared_ptr<Node_names> Nname_pointer;
Nname_pointer name = new Node_names;
name(process);

名前の宣言が間違っていることはわかっていますが、プロセスオブジェクトで初期化するだけでなく、メモリを割り当てるにはどうすればよいですか。

4

2 に答える 2

9

使用std::make_shared:

auto p = std::make_shared<Node_names>(process);

これは、任意の数のパラメーターを持つコンストラクターを持つ型に対して機能します。

これは、shared_ptr管理対象オブジェクトで を作成するための推奨されるデフォルトの方法であることに注意してください。「 shared_ptrs が所有するオブジェクトを作成するために、ほとんど常に make_shared を使用する必要があるのはなぜですか?」を参照してください。.

于 2013-06-19T11:13:30.967 に答える