【发布时间】:2015-09-11 02:55:59
【问题描述】:
我有一个函数可以创建一个带有自定义删除器的 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删除删除器。唯一的模板参数是当前视图中指向的类型。 -
@o11c 这是什么意思?我尝试了@Nawaz 提出的解决方案,删除器在
shared_ptr被销毁后被调用。 -
表示删除者的类型与
shared_ptr的类型无关。您甚至可以转换为shared_ptr<char>,它仍然会调用原始删除器。
标签: c++ c++11 shared-ptr c++14 unique-ptr