21xrx.com
2025-06-05 18:35:21 Thursday
文章检索 我的文章 写文章
C++实现智能指针的手写代码
2023-07-09 05:18:01 深夜i     23     0
C++ 智能指针 手写代码

实现智能指针是C++中的一个重要话题,它能够大大地简化程序设计,并且提高程序的效率。智能指针是一种包含了计数器和指向对象的指针的类,它能够在对象不再被访问时自动释放对象,真正实现了自动化的内存管理。

下面是一个手写的智能指针的C++代码示例,其中包含了计数器以及指向对象地址的指针:

template<typename T>
class SmartPointer
{
private:
  int* m_count;
  T* m_ptr;
public:
  SmartPointer(T* ptr = nullptr) : m_count(new int), m_ptr(ptr)
  {
    *m_count = 1;
  }
  ~SmartPointer()
  {
    release();
  }
  SmartPointer(const SmartPointer& other)
  {
    m_count = other.m_count;
    m_ptr = other.m_ptr;
    (*m_count)++;
  }
  SmartPointer& operator=(const SmartPointer& other)
  {
    if (this != &other)
    {
      release();
      m_count = other.m_count;
      m_ptr = other.m_ptr;
      (*m_count)++;
    }
    return *this;
  }
  T& operator*() const
  {
    return *m_ptr;
  }
  T* operator->() const
  {
    return m_ptr;
  }
  int use_count() const
  {
    return *m_count;
  }
  void release()
  {
    (*m_count)--;
    if (*m_count == 0)
    {
      delete m_count;
      delete m_ptr;
      m_count = nullptr;
      m_ptr = nullptr;
    }
  }
};

从上面的代码可以看出,智能指针主要包含了以下几个功能:

1. 构造函数:用于初始化计数器以及指向对象的指针;

2. 拷贝构造函数:用于创建一个新的智能指针,同时让计数器加1;

3. 拷贝赋值运算符:用于让已存在的智能指针指向另一个对象,并让计数器加1;

4. 解引用操作符:用于让智能指针具有类似于指针的行为;

5. 成员访问操作符:用于让智能指针具有类似于指针的行为;

6. use_count函数:用于获取智能指针当前的引用计数;

7. release函数:用于释放智能指针指向的对象,并将计数器减1,若计数器被减到0,则释放内存并将指针设为nullptr。

上面的示例中采用了模板类的方式,以支持不同类型的智能指针。使用手写的智能指针可以有效地避免内存泄漏和野指针,同时也可以提高程序的性能。

  
  

评论区