Вызов функций класса из конструктора или использование умных указателей?

У меня есть класс, который обрабатывает многие из огромного процесса поиска (запуск, остановка, и т. Д.).

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

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

Я немного смущен для звонка Start функция от этого пути:

CSearch search;
search.Start();

Или это:

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

Я понятия не имею о разнице или это влияет на производительность?

Что лучше и почему? (Вопрос не только об уникальном указателе)

3 ответа

Если вы не можете объяснить, почему вам действительно нужны указатели, не используйте их.

Вот краткое чтение из Страуструпа: 5.2 Управление ресурсами

Что лучше, горный велосипед или дорожный велосипед?

У обоих из них есть ситуации, когда они лучше, хотя в C++14 или лучше я бы использовал make unique вместо обернутого там нового.

Как правило, если вам не требуется динамическое время жизни или распределение по какой-либо конкретной причине, автоматическое хранение является лучшей идеей.

Основные рекомендации C++ рекомендуют, чтобы объекты в области (локальные объекты, глобальные объекты или члены) были предпочтительнее, чем выделение кучи.

С точки зрения производительности, использование переменных области видимости подразумевает, что нет отдельной стоимости размещения и освобождения, превышающей ту, которая уже использовалась для содержащей области или объекта.

Выше приведено здесь: https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Rr-scoped

Вы можете найти дополнительные рекомендации по управлению ресурсами здесь: https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#S-resource

Другие вопросы по тегам