我在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
,你可以在其中进行任何清理。