If the size of an empty class can’t be 0, what magic is doing std::tuple so the sizeof of unique_ptr is returning 8 in a 64 bit machine?
In unique_ptr the member is defined as:
typedef std::tuple<typename _Pointer::type, _Dp> __tuple_type;
__tuple_type _M_t;
Where _Dp is the deleter class.
Compiler is gcc version 4.7.1 (Debian 4.7.1-7)
The reason is that the
typename _Dp = default_delete<_Tp>is an empty class and thetupletemplate employs empty base class optimization.If you instantiate the
unique_ptrwith a non-default delete, you should see the size increase.