C++ 智能指针

1.定义

在c++ 中智能指针是一种封装了原始指针的类 , 它用来自动管理动态分配的内存,以帮助避免内存泄漏和其他与原始指针相关的问题 。 

c++11标准库提供的主要类型指针有: std::shared_ptr 和 std:: unique_ptr 

2. std::shared_ptr

std::shared_ptr 是一个共享所有权的智能指针 , 多个shared_ptr 可以指向相同的资源 ,shared_ptr使用引用计数来跟踪有多少个 shared_ptr 指向同一个资源, 当最后一个指向该资源的 shared_ptr 被销毁时, 资源会被释放 。  

用途: 适用于 资源有多个所有者的场景 

特点: 可以被复制和移动 , 2. 使用引用计数来管理资源

2.1 例子

#include <iostream>
#include<memory>

using namespace std; 
class BOX
{
public:
	BOX()
	{
		cout << "BOX build" << endl;
	}
	~BOX()
	{
		cout << "BOX destructed" << endl;
	}

	void build()
	{
		cout << "build 3 BOX" << endl;
	}

};

int main()
{
	{
		shared_ptr<BOX> boxptr1 = make_shared<BOX>();
		cout << "the number of shared_ptr is ::" << boxptr1.use_count() << endl;

		shared_ptr<BOX> boxptr2 = boxptr1;
		boxptr2->build();
		cout << "the number of shared_ptr is ::" << boxptr2.use_count() << endl;
	}

	return 0; 
}

2.2 注意

1. 假如说某个函数只能接受裸指针 
Ball* rp = p.get(); 调用shared_ptr 的get()函数来获取一个裸指针指向当前的资源

2. 如果你一个一块资源,同时有裸指针和共享指针同时指向它
    当所有的共享指针都被摧毁时 但是裸指针仍然存在的时候,这个底下的资源仍然就会被释放,
    这个时候再用裸指针访问那块资源的时候,会造成未定义,造成严重的后果
    切记共享指针和裸指针混合使用!

3.std::unique_ptr 

std::unique_ptr 是一种独占所有权的智能指针,它保证同一时间只有一个  ,std::unique_ptr指向一个给定的资源。当这个unique_ptr被销毁时(例如,离开作用域或者被显式删除),它指向的对象也会被自动删除。

用途:用于资源只需要一个所有者的场景 

特点: 不能被复制,但可以移动(使用std::move) , 轻量级的,没有引用计数的开销

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值