указатель.

фективном современном C ++» Скотта Мейера обсуждается использованиеstd::unique_ptr с пользовательским средством удаления и состояниями:

Удалители, которые являются указателями на функции, обычно вызывают размерstd::unique_ptr расти от одного слова до двух. Для средств удаления, которые являются объектами функции, изменение размера зависит от того, сколько состояния хранится в объекте функции. Функциональные объекты без сохранения состояния (например, из лямбда-выражений без перехватов) не подвергаются штрафу за размер, и это означает, что когда пользовательское средство удаления может быть реализовано либо как функция, либо как лямбда-выражение без захвата, лямбда-выражение является предпочтительным.

Как пример, это:

auto delInvmt1 = [](Investment* pInvestment) {
makeLogEntry(pInvestment);
delete pInvestment;
};

template<typename... Ts>
std::unique_ptr<Investment, decltype(delInvmt1)>
makeInvestment(Ts&&... args);

лучше чем это:

void delInvmt2(Investment* pInvestment) {
    makeLogEntry(pInvestment);
    delete pInvestment;
}

template<typename... Ts>
std::unique_ptr<Investment, void (*)(Investment*)>
makeInvestment(Ts&&... params);

Я вижу, что во втором случае указатель на функцию удаления должен быть сохранен вunique_ptr, но почему ничего подобного не нужно хранить для лямбда-кейса?

Ответы на вопрос(1)

Ваш ответ на вопрос