假设我想使用带有 unique_ptr 的自定义删除器:
void custom_deleter(int* obj)
{
delete obj;
}
为什么我要这样写:
std::unique_ptr<int, void(*)(int*)> x(new int, custom_deleter);
而不是这个:
std::unique_ptr<int> x(new int, custom_deleter); //does not compile
?
不能推断删除器的类型吗?
最佳答案
对于 unique_ptr
,删除器是类型的一部分:
template <
class T,
class Deleter = std::default_delete<T>
> class unique_ptr;
因此,当您构造一个对象时,您需要指定它的类型。你正在写的行:
std::unique_ptr<int> x(new int, custom_deleter);
相当于:
std::unique_ptr<int, std::default_delete<int> > x(new int, custom_deleter);
而且你不能构建 std::default_delete<int>
来自 custom_deleter
.
推断删除器类型的唯一方法是对该部分也使用模板推导:
template <typename T, typename Deleter>
std::unique_ptr<T, Deleter> make_unique_ptr(T* ptr, Deleter deleter) {
return std::unique_ptr<T, Deleter>(ptr, deleter);
}
关于c++ - 为什么 unique_ptr 不能推断删除器的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29660391/