我有一個定製刪除創建的unique_ptr並返回一個函數:移動與定製刪除一個的unique_ptr到一個shared_ptr
auto give_unique_ptr() {
auto deleter = [](int* pi) {
delete pi;
};
int* i = new int{1234};
return std::unique_ptr<int, decltype(deleter)>(i, deleter);
}
在該功能的客戶端代碼,我想移動unique_ptr
到shared_ptr
,但我不知道該怎麼做,因爲我不知道我的自定義刪除器的decltype以外的函數。
我猜應該是這個樣子:
auto uniquePtr = give_unique_ptr();
auto sharedPtr = std::shared_ptr<..??..>(std::move(uniquePtr));
我有什麼寫的,而不是?? ..才能得到正確的類型?
如果可能,shared_ptr
的行爲會很好,並在使用次數達到零時致電我在give_unique_ptr()
函數內創建的自定義刪除程序?
請記住'shared_ptr' *擦除刪除器。唯一的模板參數是當前視圖中指向的類型。 – o11c
@ o11c這是什麼意思?我嘗試了@Nawaz提出的解決方案,並在'shared_ptr'被銷燬後調用deleter。 – j00hi
這意味着刪除者的類型與'shared_ptr'類型無關。你甚至可以投射到'shared_ptr',它仍然會調用原始的刪除器。 –
o11c