无论如何,我可以向std::shared_ptr
的删除者发送参数吗?
感觉像是:
std::shared_ptr<A> myA( a, myDeleter(a, 5) );
其中myDeleter
有此签名:
void myDeleter(A* a, int i)
(显然上面的语法是错误的,但只是为了强调我需要删除器来获取额外的参数。)
答案 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);