Вызов функций класса из конструктора или использование умных указателей?
У меня есть класс, который обрабатывает многие из огромного процесса поиска (запуск, остановка, и т. Д.).
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