shared_ptr 自定义删除器

默认分类 · 2024-06-18 · 129 人浏览

正常来说 shared_ptr 引用计数为0时会调用构造函数并释放内存,我们可以自定义一个删除器,来代替这个过程
删除器的参数为对应类型的指针变量, 传递给shared_ptr构造函数的第二个参数

示例

  1. 默认

    #include <iostream>
    #include <memory>
    using namespace std;
    class Test {
    public:
     ~Test() { 
         cout << "析构" << endl;
     }
    };
    
    int main()
    {
     shared_ptr<Test> p(new Test);
     return 0;
     
    }
    // 输出 析构
  2. 函数指针

    #include <iostream>
    #include <memory>
    using namespace std;
    class Test {
    public:
     ~Test() { 
         cout << "析构" << endl;
     }
    };
    
    void deleter(Test* p) {
     cout << "删除" << endl;
    
    }
    
    int main()
    {
     shared_ptr<Test> p(new Test, deleter);
     return 0;
     
    }
    
    // 输出 删除
  3. lambda 表达式

    #include <iostream>
    #include <memory>
    using namespace std;
    class Test {
    public:
     ~Test() { 
         cout << "析构" << endl;
     }
    };
    
    
    
    int main()
    {
     shared_ptr<Test> p(new Test, [](Test* p) {
         cout << "lambda删除" << endl;
     });
     return 0;
     
    }
    
    // 输出 lambda删除
智能指针 cpp
Theme Jasmine by Kent Liao