nae*_*9on 0 c++ lambda unique-ptr c++14
在下面的代码中,我有一个自定义删除器(使用捕获按引用捕获的lambda)std::unique_ptr。我希望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;
}
Run Code Online (Sandbox Code Playgroud)
输出按引用捕获(即使用... lmb_sf = [&data] ...)
Size of ptr_sf = 16
In custom deleter using a state-full lambda
Run Code Online (Sandbox Code Playgroud)
输出按值捕获(即使用... lmb_sf = [data] ...)
Size of ptr_sf = 808
In custom deleter using a state-full lambda
Run Code Online (Sandbox Code Playgroud)