C ++ std :: unique_ptr: Почему с лямбдами не взимается плата за размер?

Я читаю "Эффективный современный C ++". В пункте, связанном сstd::unique_ptr указано, что если пользовательское средство удаления является объектом без сохранения состояния, плата за размер не взимается, но если это указатель на функцию илиstd::function размер платы происходит. Не могли бы вы объяснить, почему?

Допустим, у нас есть следующий код:

auto deleter_ = [](int *p) { doSth(p); delete p; };
std::unique_ptr<int, decltype(deleter_)> up(new int, deleter_);

Насколько я понимаю,unique_ptr должен иметь объект типаdecltype(deleter_) и назначитьdeleter_ к этому внутреннему объекту. Но очевидно, что это не то, что происходит. Не могли бы вы объяснить механизм, стоящий за этим, используя наименьший возможный пример кода?

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

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