代码拉取完成,页面将自动刷新
template<class T>
class auto_ptr
{
public:
// RAII
auto_ptr(T* ptr = nullptr)
: _ptr(ptr)
, _isOwner(false)
{
if (_ptr)
_isOwner = true;
}
~auto_ptr()
{
if (_ptr && _isOwner)
{
delete _ptr;
_ptr = nullptr;
}
}
//////////////////////////////////
// 具有指针类似的行为
T& operator*()
{
return *_ptr;
}
T* operator->()
{
return _ptr;
}
///////////////////////////////////
// 解决浅拷贝的方式:资源管理权转移
// 资源管理:指对资源释放权利的转移
auto_ptr(const auto_ptr<T>& ap)
: _ptr(ap._ptr)
, _isOwner(ap._isOwner)
{
ap._isOwner = false;
}
auto_ptr<T>& operator=(const auto_ptr<T>& ap)
{
if (this != &ap)
{
if (_ptr && _isOwner)
delete _ptr;
_ptr = ap._ptr;
_isOwner = ap._isOwner;
ap._isOwner = false;
}
return *this;
}
private:
T* _ptr;
mutable bool _isOwner; // 资源真正的拥有者
};
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。