我有一个函数,它使用自定义删除器创建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
中,但鉴于我不知道函数之外自定义删除器的decltype
,我不知道如何做。
我猜应该是这样的:
auto uniquePtr = give_unique_ptr();
auto sharedPtr = std::shared_ptr<..??..>(std::move(uniquePtr));
我需要写什么而不是..??..才能得到正确的类型?
如果可能的话,当shared_ptr
的使用计数为零时,它会像预期一样使用我在give_unique_ptr()
函数中创建的自定义删除器吗?
shared_ptr
擦除了删除器。当前视图中唯一的模板参数是指向的类型。 - o11cshared_ptr
的类型无关。你甚至可以将其转换为shared_ptr<char>
,它仍然会调用原始的删除器。 - o11c