智能指针的介绍

目录

1. 什么是RAII?

2. auto_ptr

3. boost

4. unique_ptr

5. 定制删除器

6. shared_ptr

7. week_ptr


1. 什么是RAII?

RAII(Resource Acquisition Is Initialization)是一种利用对象生命周期来控制程序资源(如内
存、文件句柄、网络连接、互斥量等等)的简单技术。

在对象构造时获取资源,接着控制对资源的访问使之在对象的生命周期内始终保持有效,最后在
对象析构的时候释放资源。借此,我们实际上把管理一份资源的责任托管给了一个对象。这种做
法有两大好处:

  1. 不需要显式地释放资源。
  2. 采用这种方式,对象所需的资源在其生命期内始终保持有效
// 利用RAII思想写出的智能指针模板

template <class T>
class SmartPtr
{
     SmartPtr(T* ptr)
      :_ptr(ptr);
     {}

     ~SmartPtr()
     {
         delete _ptr;
     } 

     T& operator*()
     {
         return *_ptr;
     }

     T* operator->()
     {
         return _ptr;
     }

private:
     T* _ptr;
}; 

2. auto_ptr

在C++98中就提供了一种类似于智能指针的指针。

auto_ptr的原理是:将管理权转移的思想

具体实现如下:

#pragma once
namespace bit
{
	template<class T>
	class auto_ptr
	{
		//构造函数
		auto_ptr(T* ptr)
			:_ptr(ptr)
		{}
		//转移资源
		auto_ptr(auto_ptr<T>& ap)
			:_ptr(ap._ptr)
		{
			ap._ptr = nullptr;
		}
		//赋值
		auto_ptr<T>& operator=(auto_ptr<T>& ap)
		{
			if (this != &ap)
			{
				if (_ptr)
				{
					delete _ptr;
				}
				_ptr = ap._ptr;
				ap._ptr = nullptr;
			}
			return *this;
		}
		//析构函数
		~auto_ptr()
		{
			if (_ptr)
			{
				delete _ptr;
			}
		}
		T& operator*()
		{
			return *_ptr;
		}
		T* ope
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值