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_
к этому внутреннему объекту. Но очевидно, что это не то, что происходит. Не могли бы вы объяснить механизм, стоящий за этим, используя наименьший возможный пример кода?