无论如何,我可以将参数发送到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); });

关于c++ - shared_ptr的自定义删除器的附加参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15137626/

10-08 21:32