美文网首页c++库spring boot
智能指针与内存管理

智能指针与内存管理

作者: 突然的自我_39c1 | 来源:发表于2021-03-15 09:42 被阅读0次

1. 引用计数

    引用计数这种计数是为了防止内存泄露而产生的。 基本想法是对于动态分配的对象,进行引用计数,每当增加一次对同一个对象的引用,那么引用对象的引用计数就会增加一次, 每删除一次引用,引用计数就会减一,当一个对象的引用计数减为零时,就自动删除指向的堆内存。在传统 C++ 中,『记得』手动释放资源,总不是最佳实践。因为我们很有可能就忘记了去释放资源而导致泄露。 所以通常的做法是对于一个对象而言,我们在构造函数的时候申请空间,而在析构函数(在离开作用域时调用)的时候释放空间, 也就是我们常说的 RAII 资源获取即初始化技术。C++11 引入了智能指针的概念,使用了引用计数的想法,让程序员不再需要关心手动释放内存。 这些智能指针就包括 std::shared_ptr/std::unique_ptr/std::weak_ptr,使用它们需要包含头文件 <memory>。

    注意:引用计数不是垃圾回收,引用计数能够尽快收回不再被使用的对象,同时在回收的过程中也不会造成长时间的等待, 更能够清晰明确的表明资源的生命周期。

2. std::shared_ptr

    成员方法:user_count(),作用是获得当前对象被引用的次数;reset(),作用是释放指针对象的引用,将指针设为空;swap(),作用是和另外一个shared_ptr交换引用对象和引用计数;

    线程安全性:同一个share_ptr被多个线程“读”是安全的;同一个share_ptr被多个线程“写”是不安全的;共享引用计数的不同share_ptr被多个线程“写”是安全的;

3. std::weak_ptr

    std::shared_ptr 使用引用计数, 所以有循环计数的问题. 为了打破循环,可以使用std::weak_ptr. 顾名思义.weak_ptr是一个弱引用, 只引用, 不计数. 如果一块内存被shared_ptr和weak_ptr同时引用, 当所有shared_ptr析构了之后,.不管还有没有weak_ptr引用该内存, 内存也会被释放. 所以weak_ptr不保证它指向的内存一定是有效的, 在使用之前需要检查;

    std::weak_ptr 没有 * 运算符和 -> 运算符,所以不能够对资源进行操作,它的唯一作用就是用于检查 std::shared_ptr 是否存在,其 expired() 方法能在资源未被释放时,会返回 false,否则返回 true;

4. std::unique_ptr

    是一种独占的智能指针,它禁止其它智能指针与其共享同一个对象;从而保证代码的安全性;

相关文章

  • 智能指针和垃圾回收

    堆内存管理:智能指针与垃圾回收 显式内存管理 野指针 重复释放 内存泄漏 C++11 的智能指针 unique_p...

  • C++ 智能指针

    智能指针 传统指针存在的问题需要手动管理内存容易发生内存泄露(忘记释放,出现异常等)释放之后产生野指针 智能指针就...

  • C++ 11 常用特性的使用经验总结(二)

    4、智能指针内存管理 在内存管理方面,C++11的std::auto_ptr基础上,移植了boost库中的智能指针...

  • Rust for cpp devs - 智能指针

    与 cpp 类似,Rust 也有智能指针。Rust 中的智能指针与引用最大的不同是,智能指针 own 内存,而引用...

  • Rust智能指针

    智能指针 在C/C++中,堆内存的申请和释放都由程序员自己管理,自C++11起,引入了智能指针来协助管理内存。对于...

  • 第十六章 string类和标准模板库(2)智能指针模板类

    (二)智能指针模板类 智能指针是行为类似指针的类对象,但这种对象还有其他便于管理内存的功能。 1.使用智能指针 (...

  • C++11——动态内存

    智能指针 为了使管理动态内存更容易、更安全,新标准库提供了两种管理动态对象的智能指针类型。智能指针的作用类似于常规...

  • 第12章:动态内存

    #1.动态内存与智能指针1.1 shared_ptr类1.2 直接管理内存1.3 shared_ptr和new结合...

  • 智能指针学习

    智能指针 介绍 为了更容易(同时也更安全的管)的使用动态内存,C++11提供了智能指针来管理new出来的内存sha...

  • C++智能指针

    智能指针其实本质是一个模板类,一般使用是用的这个类的对象,而不是指针智能指针体现在内存释放问题,用智能指针管理ne...

网友评论

    本文标题:智能指针与内存管理

    本文链接:https://www.haomeiwen.com/subject/xlqkcltx.html