请简述智能指针原理,并实现一个简单的智能指针。
2016-08-10 18:20
435 查看
关于智能指针,因为C++prime上面讲的比较清楚,这里只简单说下:
智能指针是一种资源管理类,通过对原始指针进行封装,在资源管理对象进行析构时对指针指向的内存进行释放;通常使用引用计数方式进行管理,一个基本实现如下:
class Object;
class SmartPointer;
class Counter
{
friend class SmartPointer;
public:
Counter()
{
ptr = NULL;
cnt = 0;
}
Counter(Object* p)
{
ptr = p;
cnt = 1;
}
~Counter()
{
delete ptr;
}
private:
Object* ptr;
int cnt;
};
class SmartPointer
{
public:
SmartPointer(Object* p)
{
ptr_counter = new Counter(p);
}
SmartPointer(const SmartPointer &sp)
{
ptr_counter = sp.ptr_counter;
++ptr_count->cnt;
}
SmartPointer& operator=(const SmartPointer &sp)
{
++sp.ptr_counter->cnt;
--ptr_counter->cnt;
if (ptr_counter->cnt == 0)
{
delete ptr_counter;
}
ptr_counter = sp.ptr_counter;
}
~SmartPointer()
{
- -ptr_counter->cnt;
if (ptr_counter->cnt == 0)
{
delete ptr_counter;
}
}
private:
Counter* ptr_counter;
};
智能指针是一种资源管理类,通过对原始指针进行封装,在资源管理对象进行析构时对指针指向的内存进行释放;通常使用引用计数方式进行管理,一个基本实现如下:
class Object;
class SmartPointer;
class Counter
{
friend class SmartPointer;
public:
Counter()
{
ptr = NULL;
cnt = 0;
}
Counter(Object* p)
{
ptr = p;
cnt = 1;
}
~Counter()
{
delete ptr;
}
private:
Object* ptr;
int cnt;
};
class SmartPointer
{
public:
SmartPointer(Object* p)
{
ptr_counter = new Counter(p);
}
SmartPointer(const SmartPointer &sp)
{
ptr_counter = sp.ptr_counter;
++ptr_count->cnt;
}
SmartPointer& operator=(const SmartPointer &sp)
{
++sp.ptr_counter->cnt;
--ptr_counter->cnt;
if (ptr_counter->cnt == 0)
{
delete ptr_counter;
}
ptr_counter = sp.ptr_counter;
}
~SmartPointer()
{
- -ptr_counter->cnt;
if (ptr_counter->cnt == 0)
{
delete ptr_counter;
}
}
private:
Counter* ptr_counter;
};
相关文章推荐
- 智能指针原理,并实现一个简单的智能指针
- 智能指针原理,并实现一个简单的智能指针
- 一个简单的智能指针的实现
- C++智能指针,指针容器原理及简单实现(auto_ptr,scoped_ptr,ptr_vector).
- c++智能指针的原理与简单实现
- 一个简单的智能指针实现
- 智能指针原理与简单实现(转)
- 一个简单的智能指针实现
- C++智能指针,指针容器原理及简单实现(auto_ptr,scoped_ptr,ptr_vector).
- 一个智能指针的简单实现
- 实现一个简单的智能指针
- 模仿的智能指针的一个简单实现
- C++智能指针原理分析与简单实现
- 一个简单的C++智能指针的实现
- 智能指针原理与简单实现
- 智能指针的原理和简单实现
- 一个简单的智能指针的实现
- 请谈谈什么是智能指针,com实现的原理 zz
- 有效的使用和设计COM智能指针——条款3:按照功能和实现原理选择合适的智能指针
- Skinned Mesh原理解析和一个最简单的实现示例(转)