C++岗位求职面试八股文第十三篇

文章介绍了C++11中的关键特性,如原子操作解决线程安全问题,智能指针(包括循环引用和内存泄露的解决方案),以及C++11的新关键字如auto、Lambda表达式、移动语义、std::move、std::function和常量引用。此外,还讨论了内存泄露的检测和预防,以及继承控制和函数默认行为的控制。
摘要由CSDN通过智能技术生成

系列文章目录

第一篇:语言基础
第二篇:设计模式
第三篇:数据库
第四篇:计算机网络
第五篇:操作系统
第六篇:LInux
第七篇:数据结构
第八篇:智力题

[241]Atomic:解决线程安全问题

问题:a++ 和 int a = b 在C++中是否是线程安全的? 答案:不是
从C/C++语法的级别来看,这是⼀条语句,应该是原⼦的;
但从编译器得到的汇编指令 来看,其实不是原⼦的。 其⼀般对应三条指令,⾸先将变ᰁa对应的内存值搬运到某个寄存器(如eax)中,然后将该 寄存器中的值⾃增1,再将该寄存器中的值搬运回a代表的内存中
解决办法: C++11新标准发布即std::atomic,这是⼀个模板类型
在这里插入图片描述

[242]请你回答一下智能指针有没有内存泄露的情况

智能指针有内存泄露的情况发生。

当两个对象同时使用一个shared_ptr成员变量指向对方,会造成循环引用,使引用计数失效,从而导致内存泄露。

智能指针的内存泄漏如何解决?
为了解决循环引用导致的内存泄漏,引入了弱指针weak_ptr,weak_ptr的构造函数不会修改引用计数的值,从而不会对对象的内存进行管理,其类似一个普通指针,但是不会指向引用计数的共享内存,但是可以检测到所管理的对象是否已经被释放,从而避免非法访问。

[243]内存泄露

指由于疏忽或错误造成了程序未能释放掉不再使⽤的内存的情况。可以使⽤Valgrind, mtrace进⾏内存泄漏检查

分类:
堆内存泄漏、系统资源泄露(如 Bitmap,handle ,SOCKET)、没有将基类的析构函数定义为虚函数
什么操作会导致内存泄露:指针指向改变,未释放动态分配内存

如何防⽌内存泄露?
将内存的分配封装在类中,构造函数分配内存,析构函数释放内存;使⽤智能指针

智能指针有了解哪些?
智能指针是为了解决动态分配内存导致内存泄露和多次释放同⼀内存(悬空指针)所提出的,C11标准中放 在< memory>头⽂件。包括:共享指针,独占指针,弱指针

[244]简述一下 C++ 11 中 auto 的具体用法

auto用于定义变量,编译器可以自动判断变量的类型
(1) auto 与 const 结合的用法
a. 当类型不为引用时,auto 的推导结果将不保留表达式的 const 属性;
b. 当类型为引用时,auto 的推导结果将保留表达式的 const 属性。

[245]简述一下 C++11 中的可变参数模板新特性

类模板参数:从右到左;
函数模板默认参数:从左到右,从右到左都可,一般从左到右
递归方式展开函数参数包
继承方式展开类参数包

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT与Fintech

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值