【问题标题】:Ptr<Node> a = CreateObject < Node > ();Ptr<Node> a = CreateObject<Node> ();
【发布时间】:2016-11-08 11:25:39
【问题描述】:

当我在 NS-3(网络模拟器)中浏览不同的示例时,我遇到了这样的定义。我不知道这个语法到底是什么意思。

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

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

HelperClass 帮助;

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

或者他们在xxx 之前加上const

我猜这是在 c++ 中创建对象的另一种方式。但这仍然令人困惑。谁能详细说明发生了什么? 提前致谢。

【问题讨论】:

  • 你听说过templates这个概念吗?
  • 我不知道模板。
  • 他们通过函数结果初始化一个对象。
  • 对不起。我跟不上你。能否请您详细说明。
  • 通过阅读一个非常复杂的系统的代码来学习 c++ 可能是我能想象到的最糟糕的方式。我建议你choose a book 然后从那里开始。

标签: c++ class object


【解决方案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 函数。

【讨论】:

  • 谢谢。我不知道智能指针和模板函数。那我怎么理解呢?
  • 嗨,我已经了解了一些模板的基础知识。但是没有遇到与您在答案中提到的类似的东西。你能给我一个参考(最好是视频链接)吗?
猜你喜欢
  • 2021-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-12
  • 2017-11-19
  • 1970-01-01
相关资源
最近更新 更多