unique_ptr
实例(没有自定义删除器)是否与原始指针具有相同的内存占用,或实例存储的内容不仅仅是指针?
答案 0 :(得分:7)
正如@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
将被销毁(这正是您想要的)。