unique_ptr 的内存占用

8

unique_ptr实例(没有自定义删除器)的内存占用与原始指针相同,还是实例存储了更多内容?


2
这是一个非常具体于实现的问题,因此在不同的标准库之间可能会有很大的差异。但是,为了进行简单的检查,为什么不使用 sizeof 来检查并与原始指针进行比较呢? - Some programmer dude
1
@JoachimPileborg 因为我认为其他人将来可能会有同样的问题。很好的观点。从技术上讲,我应该问:“是否可以实现与原始指针相同的内存占用的unique_ptr”,因为如果可能的话,实现可能会这样做。 - Museful
答案在这里:https://dev59.com/HGYr5IYBdhLWcg3ws8VT#13460653 - fatihk
@AngelinaJolly 不错的链接。我会将其标记为重复。 - Paolo M
1个回答

9

如@JoachimPileborg所建议,使用GCC 4.8(x64)即可实现此代码

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

以下代码:

sizeof(unique_ptr) = 8

根据这个实现,答案是肯定的。这并不奇怪:毕竟,unique_ptr没有为原始指针添加功能(例如像shared_ptr那样的计数器。事实上,如果我打印sizeof(shared_ptr<int>),结果这次是16)。unique_ptr会为您处理指针管理的一些方面。

顺便说一下,由于unique_ptr与原始指针不同,因此在使用其中之一时生成的代码将有所不同。特别是,如果unique_ptr超出您的代码范围,则编译器将为该特定专业化的析构函数生成代码,并且每当销毁该类型的unique_ptr时,它将使用该代码(这正是您想要的)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接