shared_ptr的自定义删除器的额外参数

14

有没有办法向 std::shared_ptr 的删除器传递参数?

类似以下的方式:

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

其中myDeleter具有以下签名:

void myDeleter(A* a, int i)

(显然上面的语法是错误的,但只是强调我需要我的删除器带有额外的参数。)
1个回答

26
你可以在将删除器作为参数传递之前,使用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); });

1
为什么Lambda表达式在C++中直到最近才被引入?非常感谢! - alexandreC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接