slam14讲-ch13

news/2024/11/16 14:24:31/

1、基础知识

1.1 c++

      1.1.1 h文件的撰写规则

#pragma once

#ifndef MYSLAM_CAMERA_H
#define MYSLAM_CAMERA_H
#endif  // MYSLAM_CAMERA_H

    1.1.2 共享指针

        在实际的 C++ 开发中,我们经常会遇到诸如程序运行中突然崩溃、程序运行所用内存越来越多最终不得不重启等问题,这些问题往往都是内存资源管理不当造成的。比如:

  • 有些内存资源已经被释放,但指向它的指针并没有改变指向(成为了野指针),并且后续还在使用;
  • 有些内存资源已经被释放,后期又试图再释放一次(重复释放同一块内存会导致程序运行崩溃);
  • 没有及时释放不再使用的内存资源,造成内存泄漏,程序占用的内存资源越来越多

         C++ 11 后实现了unique_ptr、shared_ptr 以及 weak_ptr 这 3 个智能指针来实现堆内存的自动回收。具体来讲,智能指针和普通指针的用法是相似的,不同之处在于,智能指针可以在适当时机自动释放分配的内存。也就是说,使用智能指针可以很好地避免“忘记释放内存而导致内存泄漏”问题出现。

C++ 智能指针底层是采用引用计数的方式实现的。简单的理解,智能指针在申请堆内存空间的同时,会为其配备一个整形值(初始值为 1),每当有新对象使用此堆内存时,该整形值 +1;反之,每当使用此堆内存的对象被释放时,该整形值减 1。当堆空间对应的整形值为 0 时,即表明不再有对象使用它,该堆空间就会被释放掉。

  •         std::shared_ptr 和 unique_ptr、weak_ptr 不同之处在于,多个 shared_ptr 智能指针可以共同使用同一块堆内存。并且,由于该类型智能指针在实现上采用的是引用计数机制,即便有一个 shared_ptr 指针放弃了堆内存的“使用权”(引用计数减 1),也不会影响其他指向同一堆内存的 shared_ptr 指针(只有引用计数为 0 时,堆内存才会被自动释放)。
  •         std::weak_ptr 定位为智能指针的一种,但该类型指针通常不单独使用(没有实际用处),只能和 shared_ptr 类型指针搭配使用。甚至于,我们可以将 weak_ptr 类型指针视为 shared_ptr 指针的一种辅助工具,借助 weak_ptr 类型指针, 我们可以获取 shared_ptr 指针的一些状态信息,比如有多少指向相同的 shared_ptr 指针、shared_ptr 指针指向的堆内存是否已经被释放等等。需要注意的是,当 weak_ptr 类型指针的指向和某一 shared_ptr 指针相同时,weak_ptr 指针并不会使所指堆内存的引用计数加 1;同样,当 weak_ptr 指针被释放时,之前所指堆内存的引用计数也不会因此而减 1。也就是说,weak_ptr 类型指针并不会影响所指堆内存空间的引用计数。除此之外,weak_ptr<T> 模板类中没有重载 * 和 -> 运算符,这也就意味着,weak_ptr 类型指针只能访问所指的堆内存,而无法修改它。
  •         std::unique_ptr 指针自然也具备“在适当时机自动释放堆内存空间”的能力。和 shared_ptr 指针最大的不同之处在于,unique_ptr 指针指向的堆内存无法同其它 unique_ptr 共享,也就是说,每个 unique_ptr 指针都独自拥有对其所指堆内存空间的所有权。这也就意味着,每个 unique_ptr 指针指向的堆内存空间的引用计数,都只能为 1,一旦该 unique_ptr 指针放弃对所指堆内存空间的所有权,则该空间会被立即释放回收。

http://www.ppmy.cn/news/238829.html

相关文章

​蚂蚁集团自动化混沌工程 ChaosMeta 正式开源

ChaosMeta 介绍 ChaosMeta 是一款面向云原生、自动化演练而设计的混沌工程平台。它是蚂蚁集团内部混沌工程平台 XMonkey 的对外开源版本&#xff0c;凝聚了蚂蚁集团在公司级大规模红蓝攻防演练实践中多年积累的方法论、技术能力以及产品能力。 经过公司内部多年复杂故障演练场…

Apifox 发请求时如何自动获取Cookie 和 token

介绍 用户登录到网站或 App 是非常常见的的场景&#xff0c;登录成功后一般会返回登录凭证&#xff08;一般为 Cookie 或者 token&#xff09;&#xff0c;后续其它接口发起请求时会携带 Cookie 或者 token 到服务器进行校验。校验通过&#xff0c;则返回相关的数据&#xff0…

linux防火墙添加端口 (firewalld版)

新开的云服务器&#xff0c;安全组开放之后还不能访问服务&#xff0c;但是内网127.0.0.1&#xff1a;8787可以访问&#xff0c;有可能是8787端口没开放防火墙端口。 查询已经开放的端口 firewall-cmd --list-port如果没看到8787&#xff0c;那就是8787没开放 查询某个端口是…

NXP IMX8M + Ethercat+Codesys工业实时运动控制解决方案

面向边缘计算应用的全新i.MX 8M Plus异构应用处理器&#xff0c;搭载专用神经网络加速器、独立实时子系统、双摄像头ISP、高性能DSP和GPU。 恩智浦半导体宣布推出i.MX 8M Plus应用处理器&#xff0c;进一步丰富其业界领先的产品组合。这是恩智浦首个集成了专用神经处理引擎&…

法兰规格?

RF DN25 20# JB4726 SH3406 CL300 RF WN SCH80 什么法兰&#xff1f; SH3406-96 中国石油化工部钢制管法兰&#xff08;执行标准&#xff09; RF是突面&#xff08;简称一个台&#xff09; DN25是规格&#xff08;配管直径是34MM&#xff09; 20#是材质(碳钢&#xff09; CL30…

10月12日

创建三个设备节点分别控制三个LED灯 /dev/led1 /dev/led2 /dev/led3 --------------------------------------------------- myled(驱动) ------------------------------------------------- LED1 LED2 LED3 .h #ifndef __MYLED_H__ #define __MYLED_H__typedef struct…

栓1-------

class Solution { public:bool isPowerOfTwo(int n) {return n > 0 && (n & (n-1))0;} };n&n-10 时 n为2的倍数 class Solution { public:bool isPowerOfTwo(int n) {return n > 0 && (n & -n) n;} };n & -n n 也行n为2的倍数 class…

地脚螺钉直径系列_地脚螺钉的作用,地脚螺钉直径规格!

有些消费者可能不知道地脚螺栓是什么&#xff0c;地脚螺栓其实就是埋设在地面或者基础里面&#xff0c;把大地或者基础和机器设备连接起来的工具。下面就随小编来看看什么是地脚螺栓及地脚螺栓施工方法&#xff0c;以供大家参考。 地脚螺栓可分为固定地脚螺栓、活动地脚螺栓、胀…