美文网首页
1 - 智能指针

1 - 智能指针

作者: 李伟13 | 来源:发表于2020-04-29 09:13 被阅读0次

https://www.nowcoder.com/discuss/418992

  • 智能指针的实现,weak_ptr为什么能解决循环引用的问题

<<C++ Primer>>第五版


动态内存管理通过 new 和 delete 来完成(但是容易出现问题)

智能指针

  • shared_ptr:多指针指向同一个对象
  • unique_ptr: "独占"所指向的对象
  • weak_ptr:则指向shared_prt所管理的对象.(是伴生类(书上为伴随类),是一种弱引用)

这三种类型都定义在memory头文件中

shared_ptr类

智能指针也是模板

模板
  • 类模板
  • 函数模板

以vector为例,vector是一个类模板,vector<int> 为vector模板的实例化.生成的是vector<int> 类型.


模板

shared_ptr<string> p1;
一般的定义方法:
shared_ptr<int> p = make_shared<int>(42);
通常用
auto p2 = make_shared<vector<string>>();

shared_ptr原理

https://blog.csdn.net/lizhentao0707/article/details/81156384
shared_ptr是一个模板类,用来存储指向动态分配对象的指针,负责自动释放动态分配的对象,防止堆内存泄漏。动态分配的资源,交给一个类对象去管理,当类对象声明周期结束时,自动调用析构函数释放资源.

采用引用计数器的方法,允许多个智能指针指向同一个对象,每当多一个指针指向该对象时,指向该对象的所有智能指针内部的引用计数加1,每当减少一个智能指针指向对象时,引用计数会减1,当计数为0的时候会自动的释放动态分配的资源。

计数器递增
  • 拷贝
  • 作为参数传递给一个函数
  • 作为函数的返回值
计数器递减
  • 被赋予新值
  • 被销毁(局部的shared_ptr离开作用域)

unique_ptr

unique_ptr采用的是独享所有权语义,一个非空的unique_ptr总是拥有它所指向的资源。转移一个unique_ptr将会把所有权全部从源指针转移给目标指针,源指针被置空.

unique_ptr不支持普通的拷贝和赋值操作,不能用在STL标准容器中

weak_ptr

int *pi = new int;
此new表达式在自由空间构造一个int型对象,并返回指向该对象的指针.

弱引用。 引用计数有一个问题就是互相引用形成环(环形引用),这样两个指针指向的内存都无法释放。需要使用weak_ptr打破环形引用。weak_ptr是一个弱引用,它是为了配合shared_ptr而引入的一种智能指针,它指向一个由shared_ptr管理的对象而不影响所指对象的生命周期,也就是说,它只引用,不计数。如果一块内存被shared_ptr和weak_ptr同时引用,当所有shared_ptr析构了之后,不管还有没有weak_ptr引用该内存,内存也会被释放。所以weak_ptr不保证它指向的内存一定是有效的,在使用之前使用函数lock()检查weak_ptr是否为空指针。

相关文章

  • 目录

    智能指针(1) 智能指针(2) 智能指针(3) 智能指针之使用 容器 - vector(1) 容器 - vecto...

  • C++研发工程师笔试题/面试题(1-10)

    1. (1) 简述智能指针的原理;(2)c++中常用的智能指针有哪些?(3)实现一个简单的智能指针。 简述智能指针...

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

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

  • 智能指针

    1. 什么是智能指针? 智能指针是行为类似于指针的类对象,但这种对象还有其他功能。 2. 为什么设计智能指针? 引...

  • C++ 引用计数技术及智能指针的简单实现

    1.智能指针是什么 简单来说,智能指针是一个类,它对普通指针进行封装,使智能指针类对象具有普通指针类型一样的操作。...

  • 智能指针

    理解智能指针从三个层面: 1. 智能指针使用RAII(资源获取初始化)对普通的指针进行封装,使得智能指针实质上是一...

  • C++开发心得(持续更新)

    要习惯使用智能指针,避免裸指针。 常见的智能指针有以下几种: std::shared_ptr:(1)引用计数和被管...

  • C++之智能指针

    本文主要总结C++11中的几种智能指针的原理,使用及实现方式。 I、上帝视角看智能指针 1、智能指针的引用是为了方...

  • 智能指针学习笔记

    1. 介绍 本文介绍智能指针的使用。智能指针是c++ 中管理资源的一种方式,用智能指针管理资源,不必担心资源泄露,...

  • 智能指针之使用

    上一章:智能指针 (3) 目录 有了智能指针的定义,我们现在来讲讲智能指针如何使用优势以及一些问题。1,uniqu...

网友评论

      本文标题:1 - 智能指针

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