c++ 智能指针删除器

默认情况下,智能指针过期的时候, 用delete删除原始指针,释放它管理的资源
不过我们可以自定义删除器,改变智能指针释放资源的行为
删除器可以是全局函数,仿函数,lambda表达式,形参为原始指针

// 删除器,普通函数
void deletefun(Cat *cat) {
    cout << "删除器,普通函数:"<get_name() << endl;
    delete cat;
}

// 删除器,仿函数
struct deleteClazz {
    void operator()(Cat *cat) {
        cout << "删除器,仿函数:"<get_name() << endl;
        delete cat;
    }
};

// 删除器,lambda表达式
auto deletelambda = [](Cat *cat) {
    cout << "删除器,lambda表达式:"<get_name() << endl;
    delete cat;
};

int main() {
    // shared_ptrpa0(new Cat("莉莉")); // 使用缺省的删除器
    // shared_ptrpa1(new Cat("莉莉"), deletefun); // 删除器,普通函数
    // shared_ptrpa1(new Cat("莉莉"), deleteClazz()); // 删除器,仿函数
    // shared_ptrpa2(new Cat("莉莉"), deletelambda); // 删除器,lambda表达式

    // unique_ptrpa0(new Cat("莉莉")); // 使用缺省的删除器
    // 删除器,普通函数,使用decltype推导函数类型
    // unique_ptrpa1(new Cat("莉莉"), deletefun); 
    // 删除器,普通函数,也可以写函数指针
    // unique_ptrpa2(new Cat("莉莉"), deletefun); 
    // unique_ptrpa3(new Cat("莉莉"), deleteClazz()); // 删除器,仿函数
    unique_ptrpa4(new Cat("莉莉"), deletelambda); // 删除器,lambda表达式
    return 0;
}

你可能感兴趣的:(c++ 智能指针删除器)