#pragma once
// 简单实现自动释放智能指针
// ps:分析以后可以发现AutoPtr拷贝对象时有非常大的缺陷,拷贝后会留下空智能指针对象的隐患
template <class T>
class AutoPtr
{
public:
AutoPtr(T * ptr = NULL)
:_ptr(ptr )
{}
~ AutoPtr()
{
if (_ptr )
{
delete _ptr ;
}
}
AutoPtr(AutoPtr<T>& ap)
: _ptr(ap ._ptr)
{
ap._ptr = 0;
}
AutoPtr& operator=(AutoPtr<T>& ap)
{
if (this != &ap)
{
_ptr = ap ._ptr;
ap._ptr = 0;
}
return *this ;
}
T* GetPtr()
{
return _ptr;
}
T& operator * ()
{
return *_ptr ;
}
T* operator -> ()
{
return _ptr ;
}
private:
T* _ptr ;
};
void TestAutoPtr()
{
AutoPtr<int> p1 = new int (10);
AutoPtr<int> p2 = p1;
AutoPtr<int> p3;
p3 = p2 ;
// AutoPtr的缺陷
//*p1 = 4;
}auto_ptr
最新推荐文章于 2025-05-26 22:45:00 发布
本文介绍了一个简单的智能指针AutoPtr的实现方法,并通过示例展示了其使用方式。AutoPtr采用拷贝时转移所有权的方式管理资源,但在拷贝赋值时可能会留下空智能指针对象,存在一定的缺陷。
2233

被折叠的 条评论
为什么被折叠?



