Я читаю "Эффективный современный С++". В элементе, относящемся к std::unique_ptr
, было указано, что если пользовательский делектор является объектом без гражданства, тогда плата за размер не возникает, но если это указатель на функцию или размер ставки t21. Не могли бы вы объяснить, почему?
Скажем, что у нас есть следующий код:
auto deleter_ = [](int *p) { doSth(p); delete p; };
std::unique_ptr<int, decltype(deleter_)> up(new int, deleter_);
Насколько я понимаю, unique_ptr
должен иметь объект типа decltype(deleter_)
и назначить deleter_
этому внутреннему объекту. Но, очевидно, это не то, что происходит. Не могли бы вы объяснить механизм этого, используя наименьший возможный пример кода?