【C++】关于删除器的使用——lambda表达式的应用

it2022-05-05  141

我们可以根据不同类型的指针,写不同的删除器传递给unique_ptr来实现最终可以正确的释放资源

#include<iostream> #include<memory> using namespace std; template<typename T> class MyDelete { public: void operator()(T *ptr)const { cout << "call MyDelete.operator()" << endl; delete[]ptr; } }; template<typename T> class MyFileDelete { public: void operator()(T *ptr)const { cout << "call MyFileDelete.operator()" << endl; fclose(ptr); } }; int main() { unique_ptr<int, MyDelete<int>> ptr1(new int[100]); unique_ptr<FILE, MyFileDelete<FILE>> ptr2(fopen("data.txt", "w")); return 0; }

结果:

我们也可以使用lambda表达式和function函数对象来实现上述功能

int main() { /*unique_ptr<int, MyDelete<int>> ptr1(new int[100]); unique_ptr<FILE, MyFileDelete<FILE>> ptr2(fopen("data.txt", "w"));*/ unique_ptr<int,function<void(int*)>> ptr1(new int[100], [](int *p)->void { cout << "lambad call MyDelete.operator()" << endl; delete[] p; } ); unique_ptr<FILE, function<void(FILE*)>> ptr2((fopen("data.txt","w")), [](FILE *p)->void { cout << "lambad call MyFile.operator()" << endl; fclose(p); } ); return 0; }

结果:


最新回复(0)