问题描述
#include <iostream>
#include <memory>
int main() {
int i = 0;
float f = 0.0f;
double d1 = 0.0,d2 = 0.0,d3 = 0.0,d4 = 0.0;
auto a = [i,f,d1,d2,d3,d4](){};
std::cout << sizeof(std::unique_ptr<decltype(a)>) << std::endl; // 8
std::cout << sizeof(std::unique_ptr<char,decltype(a)>) << std::endl; // 48
return 0;
}
解决方法
为什么我只加一个字符,这个程序的输出是48?
因为您指定了一个包含一个 int 一个浮点数和 4 个双精度数的删除器。该删除器被存储为唯一指针的子对象。
请注意,这种唯一指针一开始就不起作用,因为删除器不满足必要的要求。特别是,它不接受将传递给它的参数。