为什么unique_ptr的删除器需要一个类型为 unique_ptr<T, Deleter>::p ointer 的参数?



我在cppreference上看到了关于unique_ptr的描述,上面写着Deleter must be FunctionObject or lvalue reference to a FunctionObject or lvalue reference to function, callable with an argument of type unique_ptr<T, Deleter>::pointer,我不明白为什么有这样的要求FunctionObject必须有一个参数,如果我想实现这个需求,我应该怎么做?

该需求表示unique_ptr或多或少看起来像这样:

class unique_ptr {
pointer ptr;
[[no_unique_address]] deleter_type del;
public:
/* other members */
~unique_ptr() { del(ptr); } 
};

也就是说,它确保指向的值是"0";被释放";当指针被破坏时;被释放";方法

std::default_delete或多或少类似于

struct default_delete {
void operator()(pointer ptr) const { delete ptr; }
};

因此,如果你想编写一个自定义的deleter,它应该有一个成员函数void operator()(pointer ptr) const,你可以在其中进行任何清理。

相关内容

  • 没有找到相关文章

最新更新