rub*_*ict 11 c++ unique-ptr c++11
假设我想使用带有unique_ptr的自定义删除器:
void custom_deleter(int* obj)
{
delete obj;
}
Run Code Online (Sandbox Code Playgroud)
为什么我要写这个:
std::unique_ptr<int, void(*)(int*)> x(new int, custom_deleter);
Run Code Online (Sandbox Code Playgroud)
而不是这个:
std::unique_ptr<int> x(new int, custom_deleter); //does not compile
Run Code Online (Sandbox Code Playgroud)
?
不能推断出删除器的类型吗?
对于unique_ptr,删除器是类型的一部分:
template <
class T,
class Deleter = std::default_delete<T>
> class unique_ptr;
Run Code Online (Sandbox Code Playgroud)
因此,在构建对象时,需要指定其类型.你写的这行:
std::unique_ptr<int> x(new int, custom_deleter);
Run Code Online (Sandbox Code Playgroud)
相当于:
std::unique_ptr<int, std::default_delete<int> > x(new int, custom_deleter);
Run Code Online (Sandbox Code Playgroud)
你不能建立一个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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
372 次 |
| 最近记录: |