2024年C++面试题汇总及答案解析

C++这些年虽然难度大,但是热度仍然不减,在编程排行榜基本上都是前几位,得益于它良好的薪资待遇。无论是即将参加秋招的求职者还是想换工作的小伙伴,给大家整理了之前同学遇到过的C++高频面试题及答案解析,希望能给大家提供帮助。

1、简单介绍一下智能指针

1. 空指针:指针变量指向内从中编号为0的空间。用于初始化指针变量。空指针指向的内存是不可以被访问的。nullptr;

2. 野指针:指针变量指向非法的内存空间。比如指针指向的内存被释放了,但是指针没有置nullptr. 多个指针指向同一个内存,当free掉一个指针之后,其他指针就变成了野指针。

3. 对象重复释放,内存泄露

4. 不匹配的new delete的问题

智能指针:

如图 P1 P2同时指向同一个object. 在P2中,object被析构了,那么P1会变成野指针。

智能指针指向一个中间层,中间层再指向object. proxy里面使用一个引用计数变量。当p1不指向proxy的话,计数-1. 当计数为0时,proxy将被释放掉。

unique_ptr: 他是一个独享所有权的智能指针。唯一的指针,不允许其他指针与他共享指向的对象。禁止复制。但可以进行移动构造和移动赋值构造std.move()。 此时原来指向的位置就变成了空指针。

shared_ptr: 可被多个指针共享。相当于原始指针,增加了计数机制。析构函数函数应该是相对简单的函数。它使用计数机制来表明资源被几个指针共享,可以通过成员函数use_count()来查看资源的所有者个数。除了可以通过new来构造,还可以通过传入auto_ptr、unique_ptr、weak_ptr来构造。调用release()释放资源所权,计数减一;

weak_ptr: 观察指针,解决shared_ptr相互(循环)引用的问题(参见muduo库)。只看看,不进行操作。shared_ptr可以直接赋值给它,它可以通过lock函数来获得shared_ptr。(通常搭配shared_ptr使用);

auto_ptr: 已被废弃

2、C++引用和指针有什么区别?

相同点:都是地址的概念;

区别:指针指向一块儿内存,他的内容是所指内存的地址。引用则是某块儿内存的别名,引用的指向不会变化。

1:现象上看:指针在运行是可以改变其所指向的值,而引用一旦和某个对象绑定后就不再改变。

2:从内存分配上看,程序为指针变量分配内存区域,而不为引用分配内存区域。

3:不存在指向空值的引用, 但指针可以为空

4:理论上,对于指针的级数没有限制,但是引用只能是一级。

3、王者荣耀游戏中,有10个英雄,若干野怪,如何快速找最近英雄?

HashTable,或者KDTree

4、简单介绍下SPI协议

SPI协议是一种采用主从模式的串行,全双工,同步通信总线,包括时钟,输入,输出,片选四个信号线,片选信号用于选择slave设备,输入输出的每个bit都需要和时钟沿同步

5、C++如何实现只在栈上实例化对象?

只有使用new运算符,对象才会建立在堆上,因此要禁用new运算符才能只在栈上分配空间。但new操作符是C++内建的,所以必须要先认清一个事实即:new operator总是先调用operator new,所以我们只要堆new操作符进行重载,并将它声明为private的,就能保证不能再使用new实例化对象。

————————————

更多面试题,点击蓝色链接获取,随时更新哦~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值