2016-11-08 4 views
0

私はNS-3(ネットワークシミュレータ)のさまざまな例を調べていますが、このような定義があります。私は正確にこの構文が何を意味するのか把握していません。Ptr <Node> a = CreateObject < Node >();

Ptr<Node> a = CreateObject <Node>(); 

他の場合では、同様の構文を使用しますが、RHSは全く異なります。

HelperClass help;

Ptr<xxx> a = help.somethingrandom(); 

または彼らはxxxconstを付けます。

これは、C++でオブジェクトを作成する別の方法だと思います。しかし、それはまだ混乱しています。誰も何が起きているのか詳しく教えてもらえますか? ありがとうございます。

+4

あなたは[templates](http://stackoverflow.com/documentation/c%2b%2b/460/templates)の概念について聞いたことがありますか? –

+0

私はテンプレートを認識していません。 – spectre

+0

関数の結果でオブジェクトを初期化します。 – ilotXXI

答えて

1

Ptrがスマートポインタクラスであると仮定します。

template<typename Obj> 
Ptr<Obj> CreateObject() { 
    return Ptr<Obj>(new Obj); 
} 

アイデアは、コードがジェネリックであるということです、それはどのようなタイプのために働くだろう:CreateObjectは、単にこれに沸くその実装で、テンプレート関数であるようです。関数を使用すると、コンストラクタが例外をスローした場合でも、複数の初期化中にリソースがリークすることはありません。

標準ライブラリには、std::make_shared/std::make_uniqueの機能が一致する同等のstd::shared_ptr/std::unique_ptrがあります。

+0

ありがとうございます。私はスマートポインタとテンプレート関数の両方を認識していません。では、どうすればこのことを理解できますか? – spectre

+0

@spectre C++に関する本を読んでいますか? – Yakk

+0

うん。私はそれに取り組んでいます。ありがとう。 – spectre

関連する問題

 関連する問題