栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

智能指针 (C++基础学习三)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

智能指针 (C++基础学习三)

文章目录
  • 智能指针
    • 1. shared_ptr
    • 2. unique_ptr
    • 3. werk_ptr

智能指针 1. shared_ptr

(1) shared_ptr 的实现机制是在拷贝构造时,使用同一份引用计数

  • 一个模板指针 T* ptr: 指向实际对象

  • 一个引用次数: 必须new 出来,不然会多个shared_ptr 里面会有不同的引用次数而导致多次delete

  • 重载 operator* 和 operator->: 使得其能像指针一样使用shared_ptr

  • 重载 copy constructor: 使其引用次数 + 1

  • 重载 operator = (默认运算符)

    如果原来的shared_ptr 已经有对象,则让其引用次数减一,并判断引用是否为0(是否调用delete),然后将新的对象引用次数加一

  • 重载析构函数: 使引用次数减一,并判断引用是否为0 (是否调用delete)

(2) 线程安全问题

  • 同一个shared_ptr被多个线程 “”读“ 是安全的
  • 同一个shared_ptr 被多个线程 “写” 是不安全的
  • 共享引用计数的不同的shared_ptr被多个线程 “写” 是安全的
2. unique_ptr

(1)unique_ptr “唯一”拥有其所指向对象

同一时刻只能由一个unique_ptr 指向所给定对象,离开作用域时,若其指向对象,则将其所指向对象销毁(默认delete)

(2)定义unique_ptr 时

需要将其绑定到一个new返回的指针上

(3)unique_ptr 不支持普通的拷贝和赋值(因为拥有指向的对象)

但是可以拷贝和赋值一个将要被销毁的unique_ptr; 可以通过release 或者 reset 将指针所有权从一个非 const 的unique_ptr 转移到另一个unique

3. werk_ptr

1. weak_ptr 是为了配合 shared_ptr 而引入的一种智能指针

它的最大作用在于 协助shared_ptr工作,像旁观者那样观测资源的使用情况,但weak_ptr 没有共享资源,它的构造不会引起指针引用计数的增加

2. 和shared_ptr 指向相同内存

shared_ptr 析构之后内存释放,在使用之前,使用lock()检查 weak_ptr 是否为空指针

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/889559.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号