Howard Hinnant 解释说,unique_ptr
也可以使用自定义存储类型。他以“共享内存”为例。
他只给出粗略的想法(这对于快速介绍来说很好)。但是任何人都可以完成他的“自定义存储类型”示例(无论是否共享内存)?
为了支持放入
unique_ptr
共享内存,自定义删除器可以包含自定义指针类型(在共享内存应用程序中通常不是真正的指针)。一个简单地放置一个称为指针的嵌套类型,它在您的删除器中模拟指针行为,可公开访问:
template <class T>
class MyDeleter
{
public:
class pointer
{
public:
friend bool operator==(pointer x, pointer y);
friend bool operator!=(pointer x, pointer y);
// ...
};
void operator()(pointer p);
};
void test()
{
unique_ptr<int, MyDeleter<int> > p;
MyDeleter<int>::pointer p2 = p.get(); // A custom pointer type used for storage
}
我怀疑// ...
必须扩展它,并且test()
可能会在真正的“自定义存储类型”示例中做一些额外的事情。
谁能告诉我他/她在哪里
- 其实已经用过这个定制了,
- 在这种情况下,
- 哪个自定义代码,(
//...
可能) - 以及客户端代码如何使用它?(
test()
大概)