This question already has answers here:
How can std::unique_ptr have no size overhead?

(2个答案)


5年前关闭。



unique_ptr实例(不带自定义删除器)是否具有与原始指针相同的内存占用量,或者实例存储的不仅仅是指针?

最佳答案

正如@JoachimPileborg建议的那样,在GCC 4.8(x64)中,此代码

std::cout << "sizeof(unique_ptr) = " << sizeof(std::unique_ptr<int>) << '\n';

产生以下输出:



因此,在此实现下,答案为

这并不令人惊讶:毕竟,unique_ptr不会向原始指针添加功能(例如,像shared_ptr一样添加一个计数器。实际上,如果我打印sizeof(shared_ptr<int>),那么这次的结果就是16)。 unique_ptr在指针管理的某些方面为您服务。

顺便说一句,由于unique_ptr与原始unique_ptr不同,因此使用一个或另一个时生成的代码将有所不同。特别是,如果unique_ptr超出了代码的范围,则编译器将为该特定特化的析构函数生成代码,并且每次销毁该类型的ojit_code时,它将使用该代码(这正是你要)。

09-06 00:11