当我们添加任何数据类型时 std::unique_ptr 占用太多空间

Kan*_*ony -1 c++ smart-pointers std

#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;
}
Run Code Online (Sandbox Code Playgroud)

当我只添加一个字符时,为什么这个程序的输出是 48?

eer*_*ika 7

当我只添加一个字符时,为什么这个程序的输出是 48?

因为您指定了一个包含 int 浮点数和 4 个双精度数的删除器。该删除器存储为唯一指针的子对象。

请注意,这种唯一指针一开始就不起作用,因为删除器不满足必要的要求。特别是,它不接受传递给它的参数。

  • *“该删除程序会泄漏分配的字符”*。它会产生硬错误,因为删除器没有正确的“operator()”签名 (2认同)