C++智能指针

一、简介

C++智能指针解决用户在堆区申请的内存空间忘记释放而造成内存泄漏的问题。C++将普通的指针封装为一个栈对象。当栈对象的生存周期结束后,会在析构函数中释放掉申请的内存,从而防止内存泄漏。

二、简易版的自己实现的智能指针

#include <iostream>
using namespace  std;
/*方便测试的类*/
class Person
{
   
public:
	Person()
	{
   
		cout << "Person" << endl;
	}
	~Person()
	{
   
		cout << "~Person" << endl;
	}
	void Test01(void )
	{
   
		cout << "Test01" << endl;
	}

};

/*简易版的智能指针类*/
template <typename T>
class My_ptr
{
   
public:
	explicit My_ptr(T *p)
	{
   
		this->m = p;
	}
	~My_ptr()
	{
   
		if (this->m != nullptr)
			delete m;
		this->m = nullptr;

	}
	T *&operator->()
	{
   
		return m;
	}
private:
	T *m = nullptr;

};

int main()
{
   
	{
   
		My_ptr<Person> ps(new Person());
		ps->Test01();
	}
	return 0;
}
//输出
Person
Test01
~Person

三、C++智能指针分类

STL一共给我们提供了四种智能指针:auto_ptr、unique_ptr、shared_ptr和weak_ptr
模板auto_ptr是C++98提供的解决方案,C+11已将将其摒弃。尽量不使用

0、使用智能指针的注意点

  • ①、显示的创建智能指针对象,不能隐式的将一个指针转换为智能指针
  • ②、对于所有智能指针应避免使智能指针对象指向栈对象
int a = 5;
auto_ptr<int> p(&a);	//error

auto_ptr<int> p(new int(10));	//ok
int *b = new int(5);
auto_ptr<int> p(b);				//ok

1、auto_ptr

auto_ptr为C++98的方案,C++11以后不建议使用。
基本用法

auto_ptr<Person> a1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值