unique_ptr::d eleter_type::p ointer 有什么用

What is unique_ptr::deleter_type::pointer for?

本文关键字:ointer 什么 eleter ptr unique type      更新时间:2023-10-16
指定

std::unique_ptr<T,D>不是像您期望的那样存储T*,而是存储类型为 std::unique_ptr<T,D>::pointer 的对象。如果存在此类类型,则将其定义为基本D::pointer,否则T*。因此,您可以通过适当地自定义删除器来自定义基础原始指针类型。

什么时候这样做是个好主意?它的用途是什么?我能找到的唯一讨论是这个注释,它暗示"在共享内存上下文中更好地支持容器和智能指针",但这并没有完全阐明很多信息。

最初的动机是允许使用boost::offset_ptr作为unique_ptr下的表示,这将允许在进程共享内存中使用unique_ptr。 进程共享内存中的结构不应包含指针或引用,而应仅包含偏移量。

我很高兴得知相同的功能在Windows API中很有用。

显然,当deleter不对T*值进行操作时,会使用它。这就是为什么deleter可以指定与T*不同的数据类型。 一个常见的用例是 Win32 句柄:

将 std::unique_ptr 用于 Windows HANDLEs