2013-02-28 29 views
14

無論如何,我可以將參數發送到std::shared_ptr的刪除者嗎?自定義刪除shared_ptr的其他參數

東西會覺得:

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

其中myDeleter有這樣的簽名:

void myDeleter(A* a, int i) 

(以上顯然,語法是錯誤的,只是強調,我需要我的缺失者採取額外的參數。)

回答

24

在將其作爲刪除者傳遞給刪除者之前,您可以將其刪除者的第二個參數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 2013-02-28 18:39:19

相關問題