我只是学了一下编程 2021-06-27 17:36 采纳率: 15.4%
浏览 28

● 请你介绍一下C++中的智能指针 参考回答: 智能指针主要用于管理在堆上分配的内存,它将普通的指针

● 请你介绍一下C++中的智能指针 参考回答: 智能指针主要用于管理在堆上分配的内存,它将普通的指针封装为一个栈对象。当栈对象的生存周期结束后,会在析构函数中释放掉申请的内存,从而防止内存泄漏。C++ 11中最常用的智能指针类型为shared_ptr,它采用引用计数的方法,记录当前内存资源被多少个智能指针引用。该引用计数的内存在堆上分配。当新增一个时引用计数加1,当过期时引用计数减一。只有引用计数为0时,智能指针才会自动释放引用的内存资源。对shared_ptr进行初始化时不能将一个普通指针直接赋值给智能指针,因为一个是指针,一个是类。可以通过make_shared函数或者通过构造函数传入普通指针。并可以通过get函数获得普通指针。
  • 写回答

2条回答 默认 最新

  • 小P聊技术 2021-06-28 16:01
    关注


    智能指针是C++11 引入的,用于管理在堆上分配的内存,它将普通的指针封装为一个栈对象。当栈对象的生存周期结束后,会在析构函数中释放掉申请的内存,从而防止内存泄漏。包含在头文件<memory>中,其中包括:

    (1)shared_ptr:它采用引用计数的方法,记录当前内存资源被多少个智能指针引用,该引用计数的内存在堆上分配。每新增一个引用计数加1,当过期时引用计数减1。只有引用计数为0时,智能指针才会自动释放引用的内存资源。shared_ptr的一个最大的陷阱是循环引用,会导致堆内存无法正确释放,从而导致内存泄漏。

    (2)weak_ptr:为了解决循环引用导致的内存泄漏,引入了weak_ptr弱指针,weak_ptr的构造函数不会修改引用计数的值,从而不会对对象的内存进行管理,其类似一个普通指针,虽然不指向引用计数的共享内存,但是可以检测所管理的对象是否已经被释放,从而避免非法访问。

    (3)unique_ptr:一种对资源具有独占性的智能指针,即一个对象资源只能同时被一个unique_ptr指向。

    评论

报告相同问题?

悬赏问题

  • ¥15 pandas代码实现不了意图
  • ¥15 GD32H7 从存储器到外设SPI传输数据无法重复启用DMA
  • ¥25 LT码在高斯信道下的误码率仿真
  • ¥45 渲染完成之后将物体的材质贴图改变,自动化进行这个操作
  • ¥15 yolov5目标检测并显示目标出现的时间或视频帧
  • ¥15 电视版的优酷可以设置电影连续播放吗?
  • ¥50 复现论文;matlab代码编写
  • ¥30 echarts 3d地图怎么实现一进来页面散点数据和卡片一起轮播
  • ¥15 数字图像的降噪滤波增强
  • ¥15 心碎了,为啥我的神经网络训练的时候第二个批次反向传播会报错呀,第一个批次都没有问题