>我有一个处理许多大型搜索过程(开始,停止,...的类等)。
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)
如果你不能解释为什么你真的需要指针,那就不要使用它们。
以下是Stroustrup的快速阅读: 5.2 资源管理
山地自行车和公路自行车哪个更好?
这两种情况都更好,尽管在 c++14 或更好的版本中,我会使用 make unique 而不是包装的新。
作为一般规则,除非您出于某种原因需要动态生命周期 ir 分配,否则自动存储是一个更好的主意。
C++核心准则建议作用域对象(本地对象、全局对象或成员)应优先于堆分配。
在性能方面,使用作用域变量意味着没有超出已用于包含作用域或对象的单独分配和取消分配成本。
以上摘自这里: https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Rr-scoped
您可以在此处找到有关资源管理的更多指南:https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#S-resource