C++中的auto_ptr,unique_ptr,shared_ptr智能指针总结

本文总结了C++中的智能指针auto_ptr、unique_ptr和shared_ptr,介绍了它们的引入背景、实现原理、优缺点及解决循环引用问题的方法。通过对这些智能指针的讲解,展示了RAII思想在资源管理中的应用。
摘要由CSDN通过智能技术生成


先来看一看智能指针的发展历史

  • C++98产生了第一个智能指针auto_ptr
  • C++ boost给出了scoped_ptr和shared_ptr和weak_ptr
  • C++TR1 引入了shared_ptr(TR1为非标准版)
  • C++11引入unique_ptr和shared_ptr和weak_ptr

这些智能指针参考boost中的智能指针实现保证new生成的对象在程序的任何位置都可释放
RAII思想:一种利用对象生命周期来控制程序资源,在对象构造时获取资源,控制资源的访问在对象的生命周期内保持有效,最后在对象析构时释放资源
使用RAII方法控制程序资源的优点
1.不需要显示释放资源
2.保持对象所需要的资源在其生命周期内一直保持有效

template <class T>
class SmartPtr {
   
public:
	SmartPtr(T* ptr = nullptr)
		:_ptr(ptr)
	{
   }
	SmartPtr()
	{
   
		if (_ptr)
			delete _ptr;
	}
private:
	T* _ptr;
};
void MergeSort(int* a, int n) {
   
	int* tmp = (int*)malloc(sizeof(int)*n);
	SmartPtr<int> sp(tmp);//将tmp指针托付给sp对象
	_MergeSort(a, 0, n - 1, tmp);

}
int main()
{
   
	try {
   
		int a[5] = {
    0,1,2,4,3 };
		MergeSort(a, 5);
	}
		catch (const exception& e)
		{
   
			cout << e.what() << endl;
		}
	}

}

接下来介绍三种智能指针

auto_ptr

C++98中在库提供了auto_ptr的智能指针

auto_ptr<T> ptr(new T);

auto_ptr实现原理:将资源的管理权转移到另一个对象
auto_ptr存在的问题:当目标对象被置空之后,再通过此对象访问资源的时候就会出现问题

简单的模拟实现

template<T>
class AutoPtr
{
   
public:
	
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值