C++智能指针入门

本文适合初学者,介绍了C++11及以后版本的三种智能指针:std::unique_ptr, std::shared_ptr和std::weak_ptr。std::unique_ptr独享所有权,禁止拷贝,只能通过移动转移所有权。std::shared_ptr通过引用计数管理内存,防止多次释放,但可能导致循环引用问题。std::weak_ptr作为非拥有性引用,解决循环引用问题。std::enabled_shared_from_this用于类内部引用自身实例。" 135102223,1364638,项目经理的团队管理艺术:沟通、领导与风险,"['项目管理', '领导力', '沟通技巧', '团队建设', '风险管理']
摘要由CSDN通过智能技术生成

本文适用于新手阶段的人员阅读,是本人初步学习C++智能指针之后的总结,仅对C++中的智能指针做简单的介绍。

在C语言中规定使用指针对内存资源进行操作,资源的申请与释放必须由开发者主动执行。但在大型项目中,内存资源经常会由多个模块共享,经过复杂的程序逻辑,开发者经常会忘记释放内存资源或使用指针访问错误的内存地址,进而导致内存问题。这些问题是由C语言的指针语法决定的,无法规避,因此在C++中,提出了智能指针的概念,它对C语言中的指针做了封装,创建了“所有权”的概念,将内存资源的回收交给程序执行,从而规避常见的内存错误(没有一种语言能完全规避内存错误,即使是java)。

C++的智能指针将指针封装为对象,进而使用程序管理这个对象的声明周期。在C++11之后,智能指针有3中:std::unique_ptr,std::share_ptr,std::weak_ptr,下面对它们一一进行介绍。

一、std::unique_ptr

std::unique_ptr独享指针的所有权,当std::unique_ptr对象声明周期结束,调用析构函数时,会自动释放其封装的指针所指向的资源。

std::unique_ptr无法赋值到其它std::unique_ptr,无法直接通过值传递到函数参数,也无法用于任何需要拷贝的标准模板库算法。std::unique_ptr只能通过std::move转移所有权,这意味着在转移所有权之后,原始std::unique_ptr就不再拥有该内存资源。需要注意的是C++允许从函数中返回一个std::unique_ptr,返回后函数内的std::unique_ptr失去所有权,移动给返回值。

1.1 创建std::unique_ptr

  1. std::unique_ptr<int> uPtr(new int(5)); // 直接调用构造函数,参数是指针。

  1. std::unique_ptr<int> uPtr1 = std::make_unique<int>(5); // 调用stl算法,参数是对应模板参数的构造函数的参数。

需要注意的是,这里有一个可能犯的编程错误,即使用相同的指针创建std::unique_ptr,代码如下:

int *ptr = new int(5);

std::unique_ptr<int> uPtr(ptr);

std::unique_ptr<int> uPtr1(ptr);<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值