浅谈auto_ptr智能指针


引入智能指针:
智能指针的实现原理:
资源分配即初始化RAII(Resource Acquisition Is Initialization):

定义一个类来封装资源的分配和释放,在构造函数完成资源的分配
和初始化,在析构函数完成资源的清理,可以保证资源的正确初始化和释放。

实现机制:利用类的构造和析构函数(释放资源)是由编译器自动调用的。
智能指针:
1.管理指针执行对象的释放问题。

2.可以像指针一样使用。

在c++标准库里主要有四个智能指针:

C++四种智能指针auto_ptr、unique_ptr、shared_ptr和weak_ptr。

其中auto_ptr是C++98标准化引入的;
scope_ptr、shared_ptr和weak_ptr是C++11标准化才引入的(当然,早在C++03的TR1中就已经可以使用了)。我们都知道,auto_ptr虽说简单,但使用起来却到处是坑,以至于大家都不提倡使用。
shared_ptr是引用计数的智能指针,被奉为裸指针的完美替身,因此被广泛使用。也可能正是这个原因,scope_ptr 和 weak_ptr似乎被大家遗忘了(或许还会以为它们纯属多余)。

上述言论引自网上
下面简单总结下这几个智能指针:

1.auto_ptr 管理权转移
带有缺陷的设计 ----->c++98/03
在任何情况下都不要使用;

2.scoped_ptr(boost)
unique_ptr(c++11)
防拷贝--->简单粗暴设计--->功能不全。

3、shared_ptr(boost/c++11)
引用计数--->功能强大(支持拷贝、支持定制删除器)
缺陷---->循环引用(weak_ptr配合解决)。

这篇文章主要的内容是讲解auto_ptr所引出的一系列问题:


一、auto_ptr智能指针

无论在什么情况下都不要使用,下面来详细介绍下为什么不要使用它,可能会有人问,既然不让使用,那么为什么还要把它放在c++的标准库里呢?
是的,一开始我也是有这个疑问的,--->其实是因为c++标准库里的内容一经规定,就不允许修改了)

下面模拟实现其基本功能:

1.AutoPtr的第一种实现方法:

采用资源转移的方法。
一个指针将一块空间的权限完全交给了另一个指针。(权限的转移)



模拟实现代码如下:

template<class T>
class AutoPtr
{
public:
    AutoPtr(T* ptr =
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值