自定义删除shared_ptr的其他参数

时间:2013-02-28 14:12:13

标签: c++ smart-pointers

无论如何,我可以向std::shared_ptr的删除者发送参数吗?

感觉像是:

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

其中myDeleter有此签名:

void myDeleter(A* a, int i)

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

1 个答案:

答案 0 :(得分:25)

你可以{@ 1}}你的删除者的第二个参数,然后将它作为删除者传递:

std::bind

或者,您的删除器可以是一个将auto deleter = std::bind(myDeleter, std::placeholders::_1, 5); std::shared_ptr<A> myA(a, deleter); 通过其构造函数的仿函数:

int

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

struct myDeleter
{
  myDeleter(int);
  void operator()(A*);
};

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