正常来说 shared_ptr 引用计数为0时会调用构造函数并释放内存,我们可以自定义一个删除器,来代替这个过程
删除器的参数为对应类型的指针变量, 传递给shared_ptr构造函数的第二个参数
示例
默认
#include <iostream> #include <memory> using namespace std; class Test { public: ~Test() { cout << "析构" << endl; } }; int main() { shared_ptr<Test> p(new Test); return 0; } // 输出 析构
函数指针
#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; } // 输出 删除
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删除