c++ - std::unique_ptr 如何没有大小开销?

标签 c++ c++11

如果空类的大小不能为 0,那么 std::tuple 有何魔力,使得 unique_ptr 的 sizeof 在 64 位机器中返回 8?

在 unique_ptr 中,成员定义为:

  typedef std::tuple<typename _Pointer::type, _Dp>  __tuple_type;                 
  __tuple_type  _M_t;

其中_Dp是删除器类。

编译器是 gcc 版本 4.7.1 (Debian 4.7.1-7)

最佳答案

原因是typename _Dp = default_delete<_Tp>是一个空类,tuple模板采用空基类优化。

如果您实例化 unique_ptr使用非默认删除,您应该会看到大小增加。

关于c++ - std::unique_ptr 如何没有大小开销?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35801465/

相关文章:

c++ - 无法将 "derived"转换为其私有(private)基类 "base"

c++ - 在 main.cpp 中调用 copyQueue

c++ - 使用混合(浮点、 double )输入 vector 执行 AVX 内积运算的最快方法

c++ - Visual 2010 中带有 lambda 函数和枚举的 C2665,是错误还是正常?

c++ - 非静态成员函数的无效使用 在类模板的成员函数的实例化中?

c++ - 默认参数位置的 Lambda 无法访问友元成员。这是编译器错误吗?

c++ - 如何存储稀疏矩阵?

C++11:模板参数重新定义默认参数

c++ - 在unique_ptr <>中使用自定义删除器(curl_formfree())

c++ - 枚举与强类型枚举