C ++ std :: unique_ptr: Warum gibt es bei Lambdas keine Größengebühren?

Ich lese "Effective Modern C ++". In dem Artikel mit Bezug zustd::unique_ptr Es wird angegeben, dass, wenn der benutzerdefinierte Löscher ein zustandsloses Objekt ist, keine Größengebühren anfallen, aber wenn es sich um einen Funktionszeiger oder @ handelstd::function size Gebühr tritt auf. Kannst du erklären warum?

Nehmen wir an, wir haben den folgenden Code:

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

ach meinem Verständnis ist dasunique_ptr sollte ein Objekt vom Typ @ habdecltype(deleter_) und zuweisendeleter_ zu diesem internen Objekt. Aber das ist offensichtlich nicht das, was passiert. Können Sie den Mechanismus dahinter anhand eines möglichst kleinen Codebeispiels erläutern?

Antworten auf die Frage(8)

Ihre Antwort auf die Frage