C++智能指针及其原理

本文介绍了C++中的智能指针,包括RAII概念,以及std::auto_ptr、std::unique_ptr和std::shared_ptr的原理和实现。通过模拟实现展示了智能指针如何避免内存泄漏,同时指出在特定情况下如循环引用可能导致的问题。
摘要由CSDN通过智能技术生成
智能指针介绍

智能指针(RAII)是利用对象的生命周期来管理资源的技术。
RAII,Resource Acquisition Is Initialization 顾名思义,就是在初始化对象的时候获取资源,在这个对象进行析构时会帮我们释放资源,这样做的好处有很多:

  1. 不需要显示的释放资源
  2. 可以避免因为没有及时释放资源而造成的内存泄漏
  3. 资源的生命周期与对象相同
智能指针原理

下面简单的实现一个智能指针

//1. 首先为了能让智能指针管理任意类型的资源, 将其设置为模板类
template<class T>
class RAIIPtr {
   
public:
	//在构造的时候传入需要管理的资源
	RAIIPtr(T* ptr = nullptr)
		:_ptr(ptr){
   }
	//析构时释放资源
	~RAIIPtr() {
   
		if (_ptr) {
   
			delete _ptr;
		}
	}

	//重载 * -> 使之能像指针一样使用
	T& operator*() {
   
		return *_ptr;
	}
	T* operator->() {
   
		return _ptr;
	}
protected:
	T* _ptr;
};
C++标准库中的智能指针
  • std::auto_ptr
    设计思想:一旦发生拷贝,就将资源转移
    下面模拟实现auto_ptr:

    template<class T>
    class AutoPtr {
         
    public:
    	AutoPtr(T* ptr = nullptr)
    		: RAIIPtr<T>(ptr) {
         }
    	~AutoPtr() {
         
    		if (_ptr) {
         
    			delete _ptr;
    		}
    	}
    	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值