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?