【问题标题】:Calling class functions from constructor or use smart pointers?从构造函数调用类函数还是使用智能指针?
【发布时间】:2017-10-05 12:16:57
【问题描述】:

我有一个类可以处理许多巨大的搜索过程(开始、停止等)。

class CSearch
{
 public:
   CSearch();
  ~CSearch();

   bool Start();
   bool Stop();
};

从这种方式调用Start 函数我有点困惑:

CSearch search;
search.Start();

或者这个:

std::unique_ptr<CSearch> search(new CSearch);
search->Start();

我不知道差异或影响性能?

哪个更好,为什么? (问题不在于唯一的unique_pointer)

【问题讨论】:

  • 在不了解完整上下文的情况下,我会说使用指针(智能与否)可能不是解决您遇到的任何问题的正确方法。
  • 听起来你可以使用good C++ book
  • 如果您不了解其中的区别,那么您唯一能找到详尽解释的地方就是您的 C++ 书籍。这是一个相当长的技术主题,stackoverflow.com 不是从某人那里获得深入 C++ 教程的地方。
  • @Someprogrammerdude 我编辑了我的帖子,我有上面的课程。 Start 函数将在文件中搜索字符串。但我不知道我应该使用构造函数还是删除它并使用智能指针。有什么不同?

标签: c++ class smart-pointers


【解决方案1】:

如果你不能解释为什么你真的需要指针,那么就不要使用它们。

以下是 Stroustrup 的快速阅读:5.2 Resource Management

【讨论】:

    【解决方案2】:

    山地车和公路车哪个更好?

    这两种情况都有更好的情况,尽管在 或更好的情况下,我会使用 make unique 而不是那里的 Wrapped new。

    作为一般规则,除非您出于特定原因需要动态生命周期 ir 分配,否则自动存储是一个更好的主意。

    【讨论】:

      【解决方案3】:

      C++ 核心指南建议,范围对象(本地对象、全局对象或成员)应优先于堆分配。

      就性能而言,使用作用域变量意味着没有超出已用于包含作用域或对象的单独分配和释放成本。

      以上摘自这里:https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Rr-scoped

      您可以在此处找到有关资源管理的更多指南: https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#S-resource

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-16
        • 1970-01-01
        • 2016-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多