c++11:std::default_delete

头文件:<memory>

声明:

template< class T > struct default_delete;
template< class T > struct default_delete<T[]>;

std::default_delete 是不指定删除器时 std::unique_ptr 所用的默认删除策略。 default_delete 的特化在典型实现上为空类,并且用于空基类优化。

  1. 非特化的 default_delete 用 delete 解分配单个对象的内存。
  2. 亦为提供数组类型的使用 delete[] 的部分特化。

成员函数:

operator()  \\ 删除对象或数组 

void operator()(T* ptr) const;

在 ptr 上调用 delete ,仅为初等 default_delete 模板的成员。  

ptr:要删除的对象或数组

template <class U>
void operator()(U* ptr) const;

在 ptr 上调用 delete[] 。此函数仅若 U(*)[] 能隐式转换为 T(*)[] 才参与重载决议。任何情况下,若 U 是不完整类型,则程序为谬构。

仅为 default_delete<T[]> 模板特化的成员

ptr:要删除的对象或数组

#include <memory>
#include <vector>
#include <algorithm>

int main()
{
//    {
//        std::shared_ptr<int> shared_bad(new int[10]);
//    } // 析构函数调用 delete ,未定义行为

    {
        std::shared_ptr<int> shared_good(new int[10], std::default_delete<int[]>
());
    } // 析构函数调用 delete[] , ok

    {
        std::unique_ptr<int> ptr(new int(5));
    } // unique_ptr<int> 使用 default_delete<int>

    {
        std::unique_ptr<int[]> ptr(new int[10]);
    } // unique_ptr<int[]> 使用 default_delete<int[]>

    // default_delete 能用于需要删除用函数对象的任何场所
    std::vector<int*> v;
    for(int n = 0; n < 100; ++n)
        v.push_back(new int(n));
    std::for_each(v.begin(), v.end(), std::default_delete<int>());
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值