shared_ptr的自定义删除器的附加参数

Additional arguments for custom deleter of shared_ptr

本文关键字:参数 自定义 ptr shared 删除      更新时间:2023-10-16

是否可以将参数发送给std::shared_ptr的删除器?

感觉就像:

std::shared_ptr<A> myA( a, myDeleter(a, 5) );   

,其中myDeleter具有以下签名:

void myDeleter(A* a, int i)

(显然上面的语法是错误的,但只是为了强调我需要我的删除器接受额外的参数。)

您可以在将其作为删除器传递之前将删除器的第二个参数std::bind:

auto deleter = std::bind(myDeleter, std::placeholders::_1, 5);
std::shared_ptr<A> myA(a, deleter);

或者,您的删除器可以是一个函子,它通过其构造函数获取int:

struct myDeleter
{
  myDeleter(int);
  void operator()(A*);
};
myDeleter deleter(5);
std::shared_ptr<A> myA(a, deleter);

或者您可以使用lambda表达式:

std::shared_ptr<A> myA(a, [](A* a){ myDeleter(a, 5); });