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++ 之定制删除器的代码实现(使用仿函数)的主要内容,如果未能解决你的问题,请参考以下文章

C++入门篇(13)之list的实现

C++入门篇(13)之list的实现

C++入门篇(13)之list的实现

C++智能指针shared_ptr 定位删除器(仿函数)

Android学习之仿QQ側滑功能的实现

C++入门篇(14)之适配器,仿函数 并简单实现队列和栈