C++ 智能指针简单实现
程序员文章站
2022-06-23 13:38:23
...
C++标准库中定义智能指针shared_ptr< T >类型,内部使用了引用计数的方式执行内存的垃圾回收。本文实现一个简单的智能指针,探究内部实现方式。
#include <iostream>
using namespace std;
template <typename T>
class SmartPtr;
template <typename T>
class U_Ptr // 辅助类
{
private:
friend class SmartPtr<T>;
U_Ptr(T * ptr) : p(ptr), count(1) { }
~U_Ptr() { delete p; }
int count;
T * p;
};
template <typename T>
class SmartPtr
{
public:
SmartPtr(T * ptr) : rp(new U_Ptr<T>(ptr)) { }
SmartPtr(const SmartPtr<T> &sp) : rp(sp.rp) {
++rp->count; // 拷贝构造,引用计数加一
}
SmartPtr& operator = (const SmartPtr<T> & rhs) {
++rhs.rp->count;
if (--rp->count == 0) {
delete rp;
}
rp = rhs.rp;
return *this;
}
~SmartPtr() {
if (--rp->count == 0) {
delete rp;
}
}
T & operator * () {
return *(rp->p);
}
T * operator -> () {
return rp->p;
}
private:
U_Ptr<T> *rp;
};
int main() {
SmartPtr<int> ptr1(new int(2));
SmartPtr<int> ptr2(ptr1);
SmartPtr<int> ptr3 = ptr2;
cout << *ptr1 << endl;
*ptr2 = 20;
cout << *ptr2 << endl;
return 0;
}
- SmartPtr类型借助一个辅助类U_Ptr来管理类型实例的引用数。
上一篇: tweak环境安装及编写