当前位置: 首页 > news >正文

C++进阶知识复习 31~38

目的

写这一系列文章的目的主要是为了秋招时候应对计算机基础问题能够流畅的回答出来 (如果不整理下 磕磕绊绊的回答会被认为是不熟悉)

本文章题目的主要来源来自于 面试鸭
部分面试鸭上没有而牛客网上有的博主会进行查缺补漏

题目编号按照面试鸭官网题号方便大家寻找

题解大部分是博主根据自己之前的博客再加上部分网上的内容进行口语化的表述 如果涉及到省略的部分博主会提供自己或者其他人的博客链接

31. C++中的function bind lambda什么时候会用到

参考博客

包装器


  1. function常用于存储可调用对象 比如说回调函数 事件处理等 我们在写leetcode上的题目-- 逆波兰表达式的时候就可能会用到
  2. bind常用于绑定函数参数 当函数参数不完全的时候使用
  3. lambda表达式为匿名函数 通常用作短期或者一次性使用的函数

32. C++中为什么使用array 它有什么优点

array容器是一个固定大小的序列化容器 它的本质是一个静态数组 当我们要创建一个array对象的时候必须要传入两个参数 一个是类型一个是大小

如果我们明确知道了我们所需要使用到的数组的大小 那么推荐使用array 因为它的效率更高

因为它在栈空间上 固定大小 可以避免缩容扩容的开销

33. 介绍下C++中unique_ptr的原理

参考博客

智能指针


unique_ptr是C++11中新引入的一个智能指针

它的思想是独占所有权 保证资源不会被重复释放

它独占所有权的方式是禁用拷贝构造

34. 介绍C++中的share_ptr 它是线程安全的嘛

参考博客

智能指针


  1. share_ptr通过引用计数来让多个指针管理一个资源 避免重复释放的问题
  2. 它本身是线程安全的 多个对象对其或者对其管理的资源进行操作的时候则不是 这个时候就需要加锁来避免问题

35. 介绍C++中的weak_ptr

参考博客

智能指针


weak_ptr是C++11中提出来的三大智能指针之一 它通过观察资源但不持有资源的方式来解决 shara_ptr的循环引用问题

36. make_share的作用

它是C++中创建智能指针的一种方式有以下优点

  1. 简化代码 代码结构更加清晰
  2. 内存只需要进行一次分配 性能更好
  3. 由于是原子操作 可以在一定情况下避免内存泄漏的问题 比如在下面这个场景下
process(std::shared_ptr<MyClass>(new MyClass()), other_function());

37. 什么是atomic

atomic用于实现变量的原子操作

像是多线程对于一个变量进行访问的时候 这个时候可能会导致数据竞争的问题

这个时候有两种解决方案 一个就是加锁嘛 还有一个就是使用atomic

它的底层是通过cpu的提供的一些原子指令来实现的

相比锁的性能会高效一点

38. 什么时候使用锁 什么时候使用atomic

使用锁的场景

  1. 需要长时间访问临界资源 比如说访问
  2. 当多个共享资源需要同步访问的时候
  3. 当涉及到复杂操作 比如说一次性要对多个变量进行更新

使用atomic的场景

  1. 当操作可以在一个原子步骤内完成 比如说++ –
  2. 当我们对于性能的要求非常高的时候
  3. 实现非阻塞算法的时候 因为原子变量不会导致线程挂起等待锁
http://www.dtcms.com/a/111771.html

相关文章:

  • SSL证书自动化管理(ACME协议)工作流程介绍
  • 小动物多导生理记录仪产品需求定义
  • 12.青龙面板自动化我的生活
  • 01背包问题:详细解释为什么重量维度必须从大到小遍历。
  • SignalR给特定User发送消息
  • Spring event 和 MQ的区别及应用场景
  • 《Linux内存管理:实验驱动的深度探索》【附录】【实验环境搭建 4】【Qemu 如何模拟numa架构】
  • Nginx-日志配置
  • 【家政平台开发(14)】家政平台PC前端(Element plus)开发指南:从集成到组件应用
  • 【备考高项】附录:商标法(2013年修正 73条全)
  • QEMU源码全解析 —— 块设备虚拟化(14)
  • 深度学习处理文本(10)
  • 解决GraalVM Native Maven Plugin错误:JAVA_HOME未指向GraalVM Distribution
  • 【家政平台开发(15)】解锁Spring Boot:家政平台后端开发全攻略
  • 深度学习处理文本(12)
  • Linux的 /etc/sysctl.conf 笔记250404
  • AI大模型:(二)1.3 linux本地部署通义万相2.1+deepseek视频生成
  • ARM Cortex-A7 处理器支持的汇编指令集全面总结
  • 【Cursor】打开Vscode设置
  • 【nacos安装指南】
  • 关于termux运行pc交叉编译的aarch64 elf的问题
  • Leetcode hot100(day 5)
  • 【学Rust写CAD】30 Alpha256结构体补充方法(alpha256.rs)
  • 人工智能在前端开发中的应用探索
  • php8 ?-> nullsafe 操作符 使用教程
  • YOLO目标检测系列
  • 指令补充+样式绑定+计算属性+监听器
  • 鸿蒙 —— 系统图标大全
  • NLP高频面试题(三十六)——深入理解思维链(Chain-of-Thought)提示方法
  • Obsidian按下三个横线不能出现文档属性