我有一个类可以处理许多巨大的搜索过程(开始,停止等等)。
class CSearch
{
public:
CSearch();
~CSearch();
bool Start();
bool Stop();
};
我对以这种方式调用Start
函数感到有点困惑:
CSearch search;
search.Start();
或者这个:
std::unique_ptr<CSearch> search(new CSearch);
search->Start();
我不知道差异还是影响表现?
哪个更好,为什么? (问题不是唯一的唯一指针)
答案 0 :(得分:3)
如果你无法解释为什么你真的需要指针那么就不要使用它们。
在这里快速阅读Stroustrup:5.2 Resource Management
答案 1 :(得分:2)
哪个更好,山地自行车还是公路自行车?
这两种情况都有更好的情况,尽管在c++14或更好的情况下我会使用make unique而不是在那里包装新的。
作为一般规则,除非出于特殊原因需要动态生命周期分配,否则自动存储是一个更好的主意。
答案 2 :(得分:0)
C ++核心指南建议应该优先选择作用域对象(本地对象,全局对象或成员)。
在性能方面,使用范围变量意味着没有单独的分配和释放成本超过已经用于包含范围或对象的成本。
以上摘自:https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Rr-scoped
您可以在此处找到有关资源管理的更多指南: https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#S-resource