C++笔记:智能指针 std::shared_ptr

1. 语法

std::shared_ptr<类型> 变量名称{};

std::shared_ptr<int> ptrA{};

std::shared_ptr<int> ptrB{std::make_shared<int>(5)};
  • 注意:std::make_shared不支持数组。
std::shared_ptr<int[]> ptrC{ new int[5]{1, 2, 3, 4, 5} };

2. 特性

  1. 可以有多个std::shared_ptr指向同一地址;
std::shared_ptr<int> ptrC{ ptrA };
  1. 同一地址下只有当最后一个std::shared_ptr释放的时候,才会释放其所占用的内存空间;

3. 用法

3.1. .use_count();

语法:

long std::shared_ptr.use_count();

释义:

std::shared_ptr会记录当前地址有多少个智能指针调用。 use_count();会返回当前指针共有多少个对象调用。

代码:

    std::shared_ptr<int> ptrA{std::make_shared<int>(5)};
	std::shared_ptr<int> ptrB{ ptrA };
	std::shared_ptr<int> ptrC{ ptrA };

	std::cout << ptrA.use_count() << std::endl; // 3

3.2. unique(); (C++17已废弃)

语法:

bool std::shared_ptr.unique();

释义:

unique()将会返回一个bool值,如果当前智能指针是唯一拥有该指针的,那么返回true,否则返回哈false

代码:

    std::shared_ptr<int> ptrA{std::make_shared<int>(5)};
	std::shared_ptr<int> ptrB{ ptrA };
	std::shared_ptr<int> ptrC{ ptrA };
	
    std::cout << ptrA.unique() << std::endl; // false

3.3. reset();

语法:

std::shared_ptr.reset();

释义:

reset()会将当前共享指针设置为nullptr,同时如果当前智能指针是最后一个拥有该指针的对象,那么将会释放内存。

代码:

    std::shared_ptr<int> ptrA{std::make_shared<int>(5)};
	std::shared_ptr<int> ptrB{ ptrA };
	std::shared_ptr<int> ptrC{ ptrA };
	
	ptrB.rest();
	
    std::cout << ptrA << std::endl;  // 010FA41C
    std::cout << ptrB << std::endl;  // 00000000
    std::cout << ptrC << std::endl;  // 010FA41C
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值