在以下代码中,我有一个std::unique_ptr
的自定义删除器(使用捕获按引用的lambda)。我希望std::unique_ptr
对象的大小应与默认删除器的大小相同(即使用运算符删除),因为捕获是通过引用进行的。我知道无状态函子和lambda(无捕获)不会造成大小损失,那么为什么lambda按引用捕获会导致大小损失呢?预先感谢您的解释。
#include <iostream>
#include <memory>
class X{};
int main()
{
// custom deleter using a state-full lambda
double data[100]{0};
auto lmb_sf = [&data](X* ptr){
// do something
std::cout<<"In custom deleter using a state-full lambda\n";
delete ptr;
};
std::unique_ptr<X,decltype(lmb_sf)> ptr_sf(new X,lmb_sf);
std::cout<<"Size of ptr_sf = "<<sizeof(decltype(ptr_sf))<<"\n";
return 0;
}
输出按引用捕获(即使用... lmb_sf = [&data] ...)
Size of ptr_sf = 16
In custom deleter using a state-full lambda
输出按值捕获(即使用... lmb_sf = [data] ...)
Size of ptr_sf = 808
In custom deleter using a state-full lambda