如果一个空类的大小不能为0,那么std :: tuple有什么神奇之处所以unique_ptr的sizeof在64位机器中返回8?
在unique_ptr中,成员定义为:
typedef std::tuple<typename _Pointer::type, _Dp> __tuple_type;
__tuple_type _M_t;
Run Code Online (Sandbox Code Playgroud)
其中_Dp是删除类.
编译器是gcc版本4.7.1(Debian 4.7.1-7)
chi*_*ill 53
原因是它typename _Dp = default_delete<_Tp>
是一个空类,tuple
模板采用空基类优化.
如果unique_ptr
使用非默认删除实例化,则应该看到大小增加.
bam*_*s53 33
unique_ptr
指定的开销可以为零,因为实现它的唯一方法是修改复制/移动原始指针的过程; 无需其他信息.因此unique_ptr
,除了指针之外不需要存储任何东西,并且可以与指针的大小相同.
至于你的具体实施方式,实现了这一点; 只有大多数派生类型的大小必须大于零.空基类可占用零字节.标准库实现通常利用所谓的"空基类"优化来处理所有类型的事情,从容器中的无状态分配器到元组.
归档时间: |
|
查看次数: |
8759 次 |
最近记录: |