设为首页 收藏本站
查看: 203|回复: 1

[经验分享] C++ 面试题常用总结 详解 5(满足c++ 岗位必备,持续更新)

[复制链接]
累计签到:53 天
连续签到:2 天
发表于 2024-12-11 10:01:50 | 显示全部楼层 |阅读模式
来自:碧波


三、内存

1. RAII是什么?

RAII 的核心思想是:资源的获取(如内存、文件句柄、网络连接等)与对象的初始化绑定在一起。具体来说,资源在对象的构造函数中获取,并在对象的析构函数中释放。

2.  使用RAII的原因以及使用方法?

使用 RAII 的原因:

自动管理资源:利用对象的生命周期自动管理资源,避免忘记释放资源。

异常安全:即使发生异常,RAII 也能确保资源被正确释放,防止资源泄漏。

代码简洁:通过封装资源管理,减少代码重复和复杂性。

使用方法

定义资源管理类:创建一个类,负责资源的分配和释放。

在构造函数中分配资源:例如,分配内存、打开文件等。

在析构函数中释放资源:确保资源在对象生命周期结束时得到释放。

3. new 和 malloc 的区别?delete 和 free 的区别?

new:是 C++ 操作符,用于动态分配内存并调用构造函数。它会返回指向新分配内存的指针,并且可以用 delete 释放内存。new 会调用对象的构造函数初始化对象。

malloc:是 C 标准库函数,用于动态分配内存,但不调用构造函数。它返回一个 void* 指针,需要强制转换为所需类型的指针。使用 malloc 分配的内存需要用 free 释放。

delete:用于释放 new 分配的内存,并调用析构函数。对于数组使用 delete[]。

free:用于释放 malloc 分配的内存。free 不会调用析构函数。

int* p = new int(10); // 使用 new
delete p;             // 使用 delete

int* q = (int*)malloc(sizeof(int)); // 使用 malloc
free(q);                          // 使用 free

4. C++的内存框架分布情况

C++ 的内存框架主要包括以下几个区域:

栈(Stack):用于存储局部变量和函数调用信息。栈内存分配速度快,但空间有限。

堆(Heap):用于动态分配内存。程序员可以控制分配和释放内存,但需要显式管理。内存的生命周期由程序员控制。

静态存储区(Static Storage Area):用于存储静态变量和全局变量。这些变量在程序运行期间一直存在。

常量区(Constant Data Area):用于存储常量数据,如字符串常量。


5. 什么是内存对齐,内存对齐有什么好处?

内存对齐 是将数据结构的内存地址按某个特定的对齐边界(通常是数据类型的大小)进行排列。对齐可以提高内存访问效率,因为许多处理器在对齐的数据上访问更快。

好处:

提高性能:对齐的数据结构能更有效地利用缓存和减少内存访问时间。

防止错误:某些硬件架构要求数据必须对齐,否则会引发硬件异常或性能下降。

6. 什么是内存泄漏?写代码时应该怎么防止内存泄漏。

内存泄漏 是指程序在动态分配内存后,没有释放这些内存,导致系统资源浪费并最终可能导致程序崩溃或变慢。

防止内存泄漏的方法:

使用 RAII:通过对象的生命周期自动管理资源。

智能指针:使用 std::unique_ptr 和 std::shared_ptr 管理动态内存,避免手动释放内存。

内存分析工具:使用工具如 Valgrind、AddressSanitizer 等检测和分析内存泄漏。

良好的编码实践:确保每个 new 都有对应的 delete,每个 malloc 都有对应的 free。

7. 说说什么是深拷贝和浅拷贝?

浅拷贝

定义:复制对象时,只复制对象的指针值,而不复制指针指向的内容。结果是原始对象和拷贝对象共享相同的资源。

问题:修改一个对象的资源会影响到另一个对象,可能导致资源冲突和错误。

深拷贝

定义:复制对象时,创建对象指针指向的资源的完整副本。这样,原始对象和拷贝对象各自拥有自己的资源。

好处:避免共享资源带来的问题,保证对象的独立性。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-1005652-1-1.html 上篇帖子: C++ 面试题常用总结 详解 4(满足c++ 岗位必备,持续更新) 下篇帖子: C++ 面试题常用总结 详解 6(满足c++ 岗位必备,持续更新)
累计签到:53 天
连续签到:2 天
 楼主| 发表于 2024-12-11 10:02:24 | 显示全部楼层
顺便吆喝一下,技术大厂,前后端测试捞人,近三周条件放宽,来看看!>>>https://jsj.top/f/o38ijj

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表