美文网首页
c++ 智能指针删除器

c++ 智能指针删除器

作者: arkliu | 来源:发表于2022-11-14 07:02 被阅读0次

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

    // 删除器,普通函数
    void deletefun(Cat *cat) {
        cout << "删除器,普通函数:"<<cat->get_name() << endl;
        delete cat;
    }
    
    // 删除器,仿函数
    struct deleteClazz {
        void operator()(Cat *cat) {
            cout << "删除器,仿函数:"<<cat->get_name() << endl;
            delete cat;
        }
    };
    
    // 删除器,lambda表达式
    auto deletelambda = [](Cat *cat) {
        cout << "删除器,lambda表达式:"<<cat->get_name() << endl;
        delete cat;
    };
    
    int main() {
        // shared_ptr<Cat>pa0(new Cat("莉莉")); // 使用缺省的删除器
        // shared_ptr<Cat>pa1(new Cat("莉莉"), deletefun); // 删除器,普通函数
        // shared_ptr<Cat>pa1(new Cat("莉莉"), deleteClazz()); // 删除器,仿函数
        // shared_ptr<Cat>pa2(new Cat("莉莉"), deletelambda); // 删除器,lambda表达式
    
        // unique_ptr<Cat>pa0(new Cat("莉莉")); // 使用缺省的删除器
        // 删除器,普通函数,使用decltype推导函数类型
        // unique_ptr<Cat, decltype(deletefun)*>pa1(new Cat("莉莉"), deletefun); 
        // 删除器,普通函数,也可以写函数指针
        // unique_ptr<Cat, void(*)(Cat *)>pa2(new Cat("莉莉"), deletefun); 
        // unique_ptr<Cat, deleteClazz>pa3(new Cat("莉莉"), deleteClazz()); // 删除器,仿函数
        unique_ptr<Cat, decltype(deletelambda)>pa4(new Cat("莉莉"), deletelambda); // 删除器,lambda表达式
        return 0;
    }
    

    相关文章

      网友评论

          本文标题:c++ 智能指针删除器

          本文链接:https://www.haomeiwen.com/subject/gtyhtdtx.html