qdi*_*dii 63 c++ std shared-ptr unique-ptr c++11
双方unique_ptr
并shared_ptr
接受定制的析构函数他们所拥有的对象上调用.但在的情况下unique_ptr
,析构函数作为一个模板参数传递类,而类型shared_ptr
的自定义析构函数将被指定为一个模板参数的构造函数.
template <class T, class D = default_delete<T>>
class unique_ptr
{
unique_ptr(T*, D&); //simplified
...
};
Run Code Online (Sandbox Code Playgroud)
和
template<class T>
class shared_ptr
{
template<typename D>
shared_ptr(T*, D); //simplified
...
};
Run Code Online (Sandbox Code Playgroud)
我不明白为什么会有这样的差异.需要什么?
Woj*_*wka 57
如果将deleter作为模板参数提供(如unique_ptr
),则它是类型的一部分,您不需要在此类型的对象中存储任何其他内容.如果将deleteter作为构造函数的参数传递(如shared_ptr
),则需要将其存储在对象中.这是额外灵活性的代价,因为您可以为相同类型的对象使用不同的删除器.
我猜这就是原因:unique_ptr
应该是非常轻量级的对象,零开销.每个存储删除器unique_ptr
可以使其大小加倍.因为人们会使用旧的原始指针代替,这是错误的.
另一方面,shared_ptr
它不是轻量级的,因为它需要存储引用计数,因此存储自定义删除器看起来也很好.
归档时间: |
|
查看次数: |
3714 次 |
最近记录: |