C++11——智能指针

本文介绍了C++11中的三种智能指针:unique_ptr、shared_ptr和weak_ptr。unique_ptr实现独占式拥有,通过move操作转移所有权;shared_ptr支持共享拥有,利用计数机制管理资源,可避免内存泄漏;weak_ptr作为辅助类型,用于解决shared_ptr的循环引用问题,不控制对象生命周期。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

智能指针

智能指针主要用于管理在堆上分配的内存,它的作用是管理一个指针,因为存在以下这种情况:申请的空间在函数结束时忘记释放,造成内存泄漏。使用智能指针可以很大程度上的避免这个问题,因为智能指针是一个类,当超出了类的实例对象的作用域时,会自动调用对象的析构函数,析构函数会自动释放资源。所以智能指针的作用原理就是在函数结束时自动释放内存空间,不需要手动释放内存空间。

C++11中的智能指针有三个:

1. unique_ptr
2. shared_ptr
3. weak_ptr

unique_ptr

unique_ptr实现独占式拥有或严格拥有概念,保证同一时间内只有一个智能指针可以指向该对象。

	unique_ptr<int> p3(new int(11));   
	unique_ptr<int> p4;   
	p4 = p3;//此时会报错!!

这样的赋值操作是不允许的,因为它是一个独占性的智能指针,但是也并不是不能赋值,使用标准库std中的move(),让你能够将一个unique_ptr赋给另一个。这个操作叫做转移所有权,赋值之后原指针会被清空。转移之后再次调用原指针可能还是会调用就崩溃的情况,所以使用move语法的目的是强调你的这个操作是在转移所有权,让你知道自己在干什么而不会随意调用指针。

int main()
{
   
   
	unique_ptr<int> up1(new int(11));
	cout << *up1 << endl;

	unique_ptr<int> up3 = move(up1);  
	cout << *up3 << endl;

	if (up1)
		cout << *up1 << endl
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值