Chinaunix首页 | 论坛 | 博客
  • 博客访问: 49583
  • 博文数量: 11
  • 博客积分: 85
  • 博客等级: 民兵
  • 技术积分: 163
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-08 09:59
文章分类

全部博文(11)

文章存档

2013年(8)

2012年(3)

我的朋友

分类: C/C++

2013-07-15 09:49:48


点击(此处)折叠或打开

  1. #ifndef UNIQUEPTR_H
  2. #define UNIQUEPTR_H

  3. template<typename _T>
  4. struct default_delete
  5. {
  6.     void operator()(_T *ptr)
  7.     {
  8.         delete ptr;
  9.     }
  10. };

  11. template<typename _T, typename _D = default_delete<_T> >
  12. class UniquePtr
  13. {
  14. public:
  15.     UniquePtr(_T *ptr = NULL)
  16.     {
  17.         _ptr = ptr;
  18.     }

  19.     ~UniquePtr()
  20.     {
  21.         reset();
  22.     }

  23.     // Move constructor
  24.     UniquePtr(const UniquePtr<_T,_D> &u)
  25.     {
  26.         _ptr = u.release();
  27.     }

  28.     // Move assignment operator
  29.     UniquePtr<_T,_D>& operator=(const UniquePtr<_T,_D> &rhs)
  30.     {
  31.         reset(rhs.release());
  32.         return *this;
  33.     }

  34.     _T* operator->() const
  35.     {
  36.         return get();
  37.     }

  38.     _T& operator*() const
  39.     {
  40.         return *get();
  41.     }

  42.     void reset(_T *ptr = NULL)
  43.     {
  44.         _deleter(_ptr);
  45.         _ptr = ptr;
  46.     }

  47.     void swap(UniquePtr<_T,_D> &r)
  48.     {
  49.         _T *t = _ptr;
  50.         _ptr = r._ptr;
  51.         r._ptr = t;
  52.     }

  53.     _T* release() const
  54.     {
  55.         _T *t = _ptr;
  56.         _ptr = NULL;
  57.         return t;
  58.     }

  59.     _T* get() const
  60.     {
  61.         return _ptr;
  62.     }

  63. private:
  64.     mutable _T *_ptr;
  65.     _D _deleter;
  66. };

  67. #endif


阅读(1329) | 评论(0) | 转发(0) |
0

上一篇:MySQL Connector/C++的使用

下一篇:GB18030Cut

给主人留下些什么吧!~~