智能指针浅析

                                 智能指针

一、什么是智能指针?

  资源分配即初始化,定义一个类来封装资源的分配和释放,在构造函数完成资源的分配和初始化,在析构函数完成资源的清理,可以保证资源的正确初始化和释放。

   对于编译器来说,智能指针实际上是一个栈对象,并非指针类型,在栈对象生命期即将结束时,智能指针通过析构函数释放有它管理的堆内存。所有智能指针都重载了“ operator-> ”操作符,直接返回对象的引用,用以操作对象。访问智能指针原来的方法则使用“ . ”操作符。

二、为什么要有智能指针的存在?

  由于C++语言没有内存的自动回收机制,程序员每次new出来的内存都要手动delete释放,而当程序员忘delete,或者流程复杂,异常导致没有运行到delete提前退出,就会造成内存泄漏,防不胜防,则用智能指针可以有效缓解这些问题。

三、智能指针的发展

         1.Auto_ptr 的管理权转移(了解机制,不建议使用)

用一段代码配合解析


                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智能指针可以绑定到普通指针上,但是需要注意一些事项。默认情况下,智能指针使用delete释放它所关联的对象,因此一个用来初始化智能指针的普通指针必须指向动态内存。如果想将智能指针绑定到指向其他类型资源的指针上,需要提供自己的操作来替代delete。不建议混合使用普通指针和智能指针,因为这可能导致资源释放的问题。\[1\] 智能指针是模板类,创建智能指针需要提供额外的信息,即指针可以指向的类型。默认初始化的智能指针保存着一个空指针。例如,shared_ptr允许多个指针指向同一对象,可以指向不同类型的资源。\[2\] 在使用智能指针时,可以将指向用new申请的资源的普通指针传递给智能指针进行初始化构造。之后,可以像使用普通指针一样使用智能指针智能指针的一个优点是,在离开作用域后,它会自动释放所管理的资源,避免内存泄漏的风险。\[3\] #### 引用[.reference_title] - *1* *2* [C++ 智能指针](https://blog.csdn.net/Cdreamfly/article/details/123096008)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [C++之智能指针](https://blog.csdn.net/weixin_54940900/article/details/114567979)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值