【C++11及其特性】智能指针——shared_ptr

大家好,这里是国中之林!
❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看←

一.共享性智能指针

unique_ptr是排他性的,对于同一块地址的指针,只能一个智能指针进行管理.

那么共享性的就是,对于同一块地址的指针,可以有多个智能指针进行管理.

二.shared_ptr的共享原理

智能指针中会存在一个用来计数的函数,就是指向同一块地址指针的智能指针数量.

在这里插入图片描述
运行结果:
在这里插入图片描述
p1本来没有指向指针,计数为0.
p2指向指针new Person(2),计数为1.
当p1=p2时,p1也就指向p2指向的指针了,计数为2.
拷贝同样如此.
当某一个智能指针生命周期结束时,计数就会减1,当减为0时,就会调用析构,释放内存.

三.shared_ptr的构造函数

1.普通的

在这里插入图片描述

2.数组的

在这里插入图片描述

3.带删除器的

在这里插入图片描述

在这里插入图片描述

四.shared_ptr的初始化

1.通过构造

在这里插入图片描述

2.make_shared

在这里插入图片描述

五.shared_ptr的主动释放

1.空

在这里插入图片描述

2.重置

在这里插入图片描述

六.shared_ptr的重置

1.空

在这里插入图片描述

2.其他指针

在这里插入图片描述

3.带删除器

在这里插入图片描述

七.shared_ptr的交换

在这里插入图片描述

八.shared_ptr的使用陷阱

#include <iostream>
using namespace std;

class girl;

class boy
{
public:
	boy()
	{
		cout << "boy 构造函数!" << endl;
	}

	~boy()
	{
		cout << "boy 析构函数!" << endl;
	}

	void set_girlfriend(shared_ptr<girl>& sp)
	{
		m_sp = sp;
	}

private:
	shared_ptr<girl> m_sp;
};

class girl
{
public:
	girl()
	{
		cout << "girl 构造函数!" << endl;
	}

	~girl()
	{
		cout << "girl 析构函数!" << endl;
	}

	void set_girlfriend(shared_ptr<boy>& sp)
	{
		m_sp = sp;
	}

private:
	shared_ptr<boy> m_sp;
};

void use_trap()
{
	shared_ptr<boy>b(new boy());
	shared_ptr<girl>g(new girl());

	b->set_girlfriend(g);
	g->set_girlfriend(b);
}

int main()
{
	use_trap();

	system("pause");
	return 0;
}

运行结果:
在这里插入图片描述

当智能指针被当做参数传给别人时,会多一个指向,计数加一.
即使这里智能指针的生命周期结束,但是还是不能将其释放内存.

评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值