Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
363 views
in Technique[技术] by (71.8m points)

c++ - How can std::unique_ptr have no size overhead?

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)

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

The reason is that the typename _Dp = default_delete<_Tp> is an empty class and the tuple template employs empty base class optimization.

If you instantiate the unique_ptr with a non-default delete, you should see the size increase.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...