如何进行C++智能指针的实现

2023-04-11 05:01:00 智能 指针
如何进行C++智能指针的实现 C++智能指针是指一种能够自动释放所指向的内存空间的指针,它能够避免内存泄漏的问题。智能指针的实现方式有很多种,最常见的是使用引用计数的方式。 下面我们就来看看如何使用引用计数的方式实现C++智能指针。 首先,我们需要定义一个智能指针类,该类需要包含一个指针成员变量和一个引用计数成员变量。 class SmartPointer { private: int *m_ptr; //指针成员变量 int m_count; //引用计数成员变量 public: SmartPointer(int *ptr) //构造函数 :m_ptr(ptr) ,m_count(1) { } ~SmartPointer() //析构函数 { if (m_ptr) { delete m_ptr; m_ptr = NULL; } } int * get() const //获取指针 { return m_ptr; } int & count() //获取引用计数 { return m_count; } void addRef() //增加引用计数 { ++m_count; } void release() //释放引用计数 { if (--m_count == 0) { delete this; } } }; 然后我们就可以使用该类来实现C++智能指针了。下面我们来看一个使用例子。 #include using namespace std; int main() { SmartPointer sp1(new int); //创建一个智能指针 SmartPointer sp2(sp1); //拷贝构造函数 cout << sp1.count() << endl; //输出2 cout << sp2.count() << endl; //输出2 sp1.release(); //释放引用计数 cout << sp1.count() << endl; //输出1 cout << sp2.count() << endl; //输出1 sp2.release(); //释放引用计数 cout << sp1.count() << endl; //输出0 cout << sp2.count() << endl; //输出0 return 0; } 从上面的例子中我们可以看到,使用智能指针类之后,我们不需要再考虑内存泄漏的问题了。当引用计数为0的时候,智能指针类的析构函数会自动释放所指向的内存空间。

相关文章