C++语言基础篇

article/2025/9/24 22:33:59

✅作者简介:CSDN内容合伙人,全栈领域新星创作者,阿里云专家博主,华为云云享专家博主,掘金后端评审团成员                         

💕前言:

学长出的这一系列专栏适合有⼀点 C++ 基础,但是⼜不怎么扎实,或者知识点串不起来的同学,说⽩了,这个专栏就是为了拯救 ⾯试突击的你,适合⾯试突击 C++ 后台岗位知识时拿来看,不敢说 100 % 涵盖了⾯试问题,但是⾄少 90%是有的。

                             再次渡入繁世,人潮汹涌,眼里茫然,信仰永恒,皆为华夏   

目录

C++ 语⾔基础篇

说⼀下你理解的 C++ 中的四种智能指针

1、auto_ptr(C++98 的⽅案,C11 已抛弃)采⽤所有权模式。

2、unique_ptr(替换 auto_ptr )

3、shared_ptr(共享型,强引⽤)

4、weak_ptr(弱引⽤)

C++ 语⾔基础篇

说⼀下你理解的 C++ 中的四种智能指针

⾯试官你好,⾸先,说⼀下为什么要使⽤智能指针:智能指针其作⽤是管理⼀个指针,避免咋们程序员申请的空间 在函数结束时忘记释放,造成内存泄漏这种情况滴发⽣。 然后使⽤智能指针可以很⼤程度上的避免这个问题,因为智能指针就是⼀个类,当超出了类的作⽤域是,类会⾃动 调⽤析构函数,析构函数会⾃动释放资源。所以智能指针的作⽤原理就是在函数结束时⾃动释放内存空间,不需要 ⼿动释放内存空间。

常⽤接⼝

T* get();T& operator*();T* operator->();T& operator=(const T& val);T* release();void reset (T* ptr = nullptr);

T是模板参数, 也就是传⼊的类型;

get() ⽤来获取 auto_ptr 封装在内部的指针, 也就是获取原⽣指针;

operator() ᯿载 , operator->() ᯿载了->, operator=()᯿载了=;

realease() 将 auto_ptr 封装在内部的指针置为 nullptr, 但并不会破坏指针所指向的内容, 函数返回的是内部指 针置空之前的值; 直接释放封装的内部指针所指向的内存, 如果指定了 ptr 的值, 则将内部指针初始化为该值 (否则将其设置为

nullptr; 下⾯分别说⼀下哪四种:

1、auto_ptr(C++98 的⽅案,C11 已抛弃)采⽤所有权模式。

auto_ptr<std::string> p1 (new string ("hello"));auto_ptr<std::string> p2;p2 = p1; //auto_ptr 不会报错.

2、unique_ptr(替换 auto_ptr )

unique_ptr 实现独占式拥有或严格拥有概念,保证同⼀时间内只有⼀个智能指针可以指向该对象。它对于避免资 源泄露特别有⽤。 采⽤所有权模式,还是上⾯那个例⼦

unique_ptr<string> p3 (new string (auto));//#4unique_ptr<string> p4;//#5p4 = p3;//此时会报错

编译译器认为 p4=p3 ⾮法,避免了 p3 不再指向有效数据的问题。 因此,unique_ptr ⽐ auto_ptr 更安全。

3、shared_ptr(共享型,强引⽤)

shared_ptr 实现共享式拥有概念,多个智能指针可以指向相同对象,该对象和其相关资源会在“最后⼀个引⽤被销 毁”时候释放。从名字 share 就可以看出了资源可以被多个指针共享,它使⽤计数机制来表明资源被⼏个指针共 享。 可以通过成员函数 use_count() 来查看资源的所有者个数,除了可以通过 new 来构造,还可以通过传⼊auto_ptr, unique_ptr,weak_ptr 来构造。当我们调⽤ release() 时,当前指针会释放资源所有权,计数减⼀。当计数等于 0

时,资源会被释放。

shared_ptr 是为了解决 auto_ptr 在对象所有权上的局限性 (auto_ptr 是独占的),在使⽤引⽤计数的机制上提供了 可以共享所有权的智能指针。

4、weak_ptr(弱引⽤)

weak_ptr 是⼀种不控制对象⽣命周期的智能指针,它指向⼀个 shared_ptr 管理的对象。进⾏该对象的内存管理 的是那个强引⽤的 shared_ptr。

weak_ptr 只是提供了对管理对象的⼀个访问⼿段。weak_ptr 设计的⽬的是为配合 shared_ptr ⽽引⼊的⼀种智 能指针来协助 shared_ptr ⼯作,它只可以从⼀个 shared_ptr 或另⼀个 weak_ptr 对象构造,,它的构造和析构不会 引起引⽤记数的增加或减少。

weak_ptr 是⽤来解决 shared_ptr 相互引⽤时的死锁问题,如果说两个 shared_ptr 相互引⽤,那么这两个指针的 引⽤计数永远不可能下降为0,也就是资源永远不会释放。它是对对象的⼀种弱引⽤,不会增加对象的引⽤计数, 和 shared_ptr 之间可以相互转化,shared_ptr 可以直接赋值给它,它可以通过调⽤ lock 函数来获得

shared_ptr。 当两个智能指针都是 shared_ptr 类型的时候,析构时两个资源引⽤计数会减⼀,但是两者引⽤计数还是为 1,导 致跳出函数时资源没有被释放(的析构函数没有被调⽤),解决办法:把其中⼀个改为weak_ptr就可以。

关注博主不迷路,✌️公💕众👌号👀叶秋学长,即可领取学习路线和资源代码,拍一拍学长即可得到学长✌️


http://chatgpt.dhexx.cn/article/x1FLXLDV.shtml

相关文章

PCL12.1 Realease 附加依赖项

PCL12.1 Realease 附加依赖项 libboost_atomic-vc142-mt-g-x64-1_78.lib libboost_bzip2-vc142-mt-g-x64-1_78.lib libboost_chrono-vc142-mt-g-x64-1_78.lib libboost_container-vc142-mt-g-x64-1_78.lib libboost_context-vc142-mt-g-x64-1_78.lib libboost_contract-vc142-…

Vue强制刷新页面重新加载数据方法

业务场景 在管理后台执行完增删改查的操作之后&#xff0c;需要重新加载页面刷新数据以便页面数据的更新 实现原理 就是通过控制router-view 的显示与隐藏&#xff0c;来重渲染路由区域&#xff0c;重而达到页面刷新的效果&#xff0c;show -> flase -> show 具体代码…

Linux 重新加载 nginx 配置命令

1. 查找 nginx 位置 whereis nginx2. 进入 nginx 目录 cd /usr/local/nginx/sbin3. 检查 nginx 配置文件是否正确 ./nginx -t 4. 重新加载配置文件 ./nginx -s reload

IDEA 无法重新加载Maven项目

IDEA 无法重新加载Maven项目 如图&#xff1a; 真头疼&#xff0c;搞了半小时才搞明白&#xff0c;我的Maven版本是3.8.6&#xff0c;而idea版本是2020&#xff0c;用不了这么新版的maven。 解决方案 maven版本高于idea版本&#xff0c;去查找低于idea版本日期的maven或者直…

Unity架构之详解域重新加载和场景重新加载

一、unity进入运行模式包括以下主要阶段 备份当前场景&#xff1a;这仅在场景被修改后发生。这样当退出运行模式时&#xff0c;Unity 将场景恢复为运行模式开始前的状态。Domain Reload&#xff1a;通过重新加载脚本域来重置脚本状态。Scene Reload&#xff1a;通过重新加载场…

Pycharm如何重新加载

在日常工作中&#xff0c;我们可能会经常遇到一种情况&#xff0c;那就是当我们程序执行结束后&#xff0c;相应的项目文件并没有自动显现出来&#xff0c;这时为避免我们关闭Pycharm再重新打开的麻烦&#xff0c;我们可以使用Pycharm中的同步或者快捷键进行重新加载。 1.同步 …

Box2d源码学习十一GJK之距离的实现

本系列博客是由扭曲45原创&#xff0c;欢迎转载&#xff0c;转载时注明出处&#xff0c;http://blog.csdn.net/cg0206/article/details/8352227 Box2d中距离是指两个形状最近点之间的距离&#xff0c;主要用于形状的碰撞检测&#xff0c;通过GJK算法实现&#xff0c;在GJK中又使…

GJK算法求凸多边形之间的距离

GJK算法最初用来求三维空间中凸多面体的距离&#xff08;即最近距离&#xff09;&#xff0c;也因此经常用来做碰撞检测&#xff08;距离是否为0&#xff09;。后被推广到n维空间中求凸包之间的距离&#xff0c;此处用来求二维平面上2个凸多边形的距离。 GJK算法首先要解决…

GJK算法,碰撞检测(自学笔记,侵权删)

学哔哩哔哩《看似简单的复杂问题&#xff0c;奇怪而优雅的解决方式&#xff08;GJK算法&#xff09; | Reducible》——来自博主“我最会爬惹”笔记 一、凸形和凹形的基础概念 所有图形可以分成两种&#xff1a;凸形和凹形&#xff0c;如图1.1所示。 图1.1 凸形和凹形 凸形的性…

判断两个形状是否相交(二)-GJK

判断两个形状是否相交二-GJK 原文地址一 介绍二凸多边形性质三Minkowski和四单纯形五支持函数六创建单纯形七相交检测八迭代 然后我们开始循环迭代第二次迭代第三次迭代 九检测单纯形结束语 判断两个形状是否相交(二)-GJK 原文地址 一、 介绍&#xff1a; GJK和SAT一样&am…

碰撞检测GJK算法论文解析一

碰撞检测GJK算法论文解析一 碰撞检测Objcet Representation And Distance1.涉及的概念2.内容详解 Preliminaries1.涉及的概念2.内容详解 碰撞检测 碰撞检测是3维游戏内必不可少的一个功能&#xff0c;有了碰撞检测&#xff0c;游戏才能显得更加真实。之前查找碰撞检测的资料&a…

GJK之判断是否相交

由于排版问题,新文章已经更新到 本文新地址 原文地址: http://www.codezealot.org/archives/88 一、 介绍&#xff1a; GJK和SAT一样&#xff0c;只适用于凸多边形。GJK更为强大的地方在于&#xff0c;它可以通过“支持函数”(稍后讨论)支持所有的形状。因此&#xff0c;和SA…

引擎开发_ 碰撞检测_GJK 算法详细介绍

概述 和SAT(分离轴定理)算法一样&#xff0c;GJK算法也只对凸体有效。 GJK算法的优势是&#xff1a;通过support函数&#xff08;后面会详细讲述&#xff09;&#xff0c;从而支持任何凸体形状之间的碰撞检测&#xff1b;相比SAT算法&#xff0c;你不需要一些额外的操作&#x…

Planning-碰撞检测之GJK

原文:dyn4j:GJK (Gilbert–Johnson–Keerthi) 目录 1. Minkowski Sum(明可夫斯基和)2. Simplex3. support函数4. 构建Simplex G J K GJK GJK和 S A T SAT SAT一样用于检测凸多边形&#xff0c;和 S A T SAT SAT不同&#xff0c; G J K GJK GJK可以处理任意形状的凸多边形&#…

GJK算法

转自&#xff1a;http://blog.sina.com.cn/s/blog_833d50630100xw1r.html GJK算法最初用来求三维空间中凸多面体的距离&#xff08;即最近距离&#xff09;&#xff0c;也因此经常用来做碰撞检测&#xff08;距离是否为0&#xff09;。后被推广到n维空间中求凸包之间的距离&…

碰撞检测GJK算法论文解析二

碰撞检测GJK算法论文解析二 The Theoretical Algorithm内容详解 初探The Distance Subalgorithm内容详解 Appendix Ⅱ涉及的概念内容详解 接上文&#xff0c;本篇文章讲解GJK算法论文的第四、第五部分前半部分&#xff0c;这是整个算法最为核心的部分。第四部分阐述了算法的核心…

碰撞检测GJK算法论文解析三

碰撞检测GJK算法论文解析三 再探Appendix Ⅱ内容详解 再探The Distance Subalgorithm内容详解过程1过程2过程3 这里要先纠正上篇文章的一些错误&#xff0c;就是上篇文章的最后其实并没有证明定理3&#xff0c;而只是给出了仿射集系数向量 λ \lambda λ的解的形式&#xff0c;…

GJK碰撞检测(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

物理引擎学习04-GJK计算多边形之间的最近距离

计算多边形之间的最近距离&#xff0c;才是GJK算法原本的目的。只有两个多边形不相交&#xff0c;计算最近距离才有效。如果相交&#xff0c;则最近距离无效&#xff0c;但是可以使用EPA算法要计算碰撞深度。本文的写作目的&#xff0c;主要是对GJK算法的理解和应用。对算法本身…

python碰撞检测算法_GJK碰撞检测算法

现实世界里我们对于是否碰撞的判断可以说极其容易而且准确,比如下图。在二进制的世界里,一切就没这么直观了。 GJK(Gilbert-Johnson-Keerthi Distance Algorithm) GJK 就是此次要实现的碰撞检测算法。如果对碰撞算法有过了解的话,大概率听过另一个碰撞检测算法 SAT(Separati…