Ptr <node> a = CreateObject&lt;节点&gt; ();

时间:2016-11-08 11:25:40

标签: c++ class object

虽然我在NS-3(网络模拟器)中经历了不同的例子,但我遇到了这样的定义。我想弄清楚这种语法究竟意味着什么。

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

在其他一些情况下,他们使用类似的语法,但RHS是完全不同的。

HelperClass帮助;

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

或在const之前加xxx前缀。

我想这是在c ++中创建对象的另一种方式。但它仍然令人困惑。任何人都可以详细说明发生了什么? 提前致谢。

1 个答案:

答案 0 :(得分:1)

假设Ptr是一些智能指针类。似乎CreateObject是模板函数,实现简单归结为:

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

这个想法是代码是通用的,它适用于任何类型。如果构造函数碰巧抛出异常,则使用函数可确保在多次初始化期间没有资源泄漏。

标准库的等效std::shared_ptr / std::unique_ptr具有匹配的std::make_shared / std::make_unique函数。