У меня есть функция, которая создает unique_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
, но я не знаю, как это сделать, учитывая, что я не знаю тип декларации моего пользовательского удаления вне функции.
Я думаю, он должен выглядеть примерно так:
auto uniquePtr = give_unique_ptr();
auto sharedPtr = std::shared_ptr<..??..>(std::move(uniquePtr));
Что мне нужно написать вместо..??.., чтобы получить правильный тип?
Если это возможно, будет ли стиль shared_ptr
вести себя красиво и вызвать мой пользовательский отладчик, созданный внутри функции give_unique_ptr()
, когда счетчик использования достигнет нуля?