c++ 之定制删除器的代码实现(使用仿函数)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++ 之定制删除器的代码实现(使用仿函数)相关的知识,希望对你有一定的参考价值。
template<class T> struct Del { void operator()(const T* ptr) { cout << "Del" <<ptr<< endl; delete ptr; } }; template<class T> struct FFF { void operator()(const T* ptr) { cout << "delete[]" << endl; delete[] ptr; } }; struct Free//仿函数 { void operator() (void* ptr) { cout << "free:" << ptr << endl; free(ptr); } }; struct Fclose { void operator() (void* ptr) { cout << "fclose:" << ptr << endl; fclose((FILE*)ptr); } }; template<class T,class Deleter =Del<T> > class Shared_ptr { public: Shared_ptr(T *ptr) :_ptr(ptr), _refcount(new long(1)) {} Shared_ptr(T *ptr, Deleter del) :_ptr(ptr), _refcount(new long(1)), _del(del) {} ~Shared_ptr() { Realease(); } protected: void Realease() { if (--*_refcount == 0) { _del(_ptr); delete _refcount; } } private: T *_ptr; Deleter _del; long *_refcount; }; void test1() { Shared_ptr<int> s1(new int(10)); //return 0; Shared_ptr<int, Free>s2((int*)malloc(sizeof(int)* 10), Free()); // Shared_ptr<int, Free>s2((int*)malloc(sizeof(int)* 10), Free()); Shared_ptr<FILE, Fclose>s3(fopen("test.txt","w"), Fclose()); } int main() { test1(); }
以上是关于c++ 之定制删除器的代码实现(使用仿函数)的主要内容,如果未能解决你的问题,请参考以下文章