解析智能指针底层简单实现

  很多人都误以为智能指针是一个指针,其实不然,智能指针不是指针,智能指针是一个模板,由智能指针实例化出来的的对象具有和常规指针相似的行为,但是他能够自动的释放所指向的对象,所以我们称之为智能指针。如果我们用普通指针来创建一个指向某个对象的指针,那么我们最后必须要手动释放这块空间,而智能指针它是一个类,它释放空间是通过析构函数完成的,正是由于有了这一层封装机制,所以智能指针才能够管理一个对象的生命周期。(定义一个类来封装资源的分配和释放,在构造函数完成资源的分配和初始化,在析构函数完成资源的清理,可以保证资源的正确初始化和释放。这样的方法称为RAII)

  起初在C++标准库里面是没有智能指针的,直到C++11中才加入了shared_ptr和unique_ptr,weak_ptr。最早的智能指针在Boost库里面,Boost是为C++标准库提供扩展的一些C++程序的总称,由Boost社区组织开发维护。

1、auto_ptr
  auto_ptr在STL中早就存在了,auto_ptr是通过权限转移的方式来防止值拷贝所带来问题,所谓权限转移就是说开辟的动态内存任何时刻只能由一个指针指向。


下面通过实现自己的AutoPtr来剖析一下auto_ptr。现在已经不用aotu_ptr了,常用的是scoped_ptr和shared_ptr.

<span style="font-size:14px;">template<typename T>
class AutoPtr                       //AutoPtr是一个类模板,不是指针类型
{
public:
       AutoPtr(T* ptr=0);
       AutoPtr(AutoPtr<T>& ap);
       AutoPtr<T>& operator=(AutoPtr<T>& ap);
       T* 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值