某日二师兄参加XXX科技公司的C++工程师开发岗位第13面:
面试官:什么是
RAII?二师兄:
RAII是Resource Acquisition Is Initialization的缩写。翻译成中文是资源获取即初始化。
【资料图】
面试官:
RAII有什么特点和优势?二师兄:主要的特点是,在对象初始化时获取资源,在对象析构时释放资源。这种技术可以避免资源邪路或内存泄漏,提高程序的健壮性和可维护性。
面试官:使用
RAII可以做哪些事情?二师兄:主要可以管理动态分配的内存而不需要手动申请和释放,管理锁不需要手动加锁和解锁,管理句柄不需要手动打开和关闭。
面试官:你知道有哪些C++标准库中已经存在的类型使用了
RAII技术?二师兄:有
std::shared_ptr、std::unqiue_ptr和std::lock_guard及std::unqiue_lock。面试官:知道
std::lock_guard如何实现的吗?二师兄:应该是在构造的时候锁定,在析构的时候解锁。
class lock_gurad{public: lock_gurad(std::mutex& mtx):mtx_(mtx){mtx_.lock(); } ~lock_gurad(){mtx_.unlock();}private: std::mutex mtx_;};面试官:好的。今天的面试到此结束,回去等通知吧。
让我们仔细看一下二师兄的这段代码,不难发现存在以下问题:
std::mutex mtx_不能直接保存值,因为mutex没有拷贝构造函数,所以这里需要使用引用。需要在构造函数前加上explicit关键字,防止编译器隐式转换lock_gurad不能拷贝(因为会有多个实例管理一个互斥锁,导致不可预测的行为),所以要删除拷贝构造函数和拷贝赋值运算符。修复后的代码如下:
class lock_guard{public: explicit lock_guard(std::mutex& mtx) : mtx_(mtx){ mtx_.lock(); } ~lock_guard(){ mtx_.unlock(); } lock_guard(const lock_guard&) = delete; lock_guard& operator=(const lock_guard&) = delete;private: std::mutex& mtx_;};好了,今日份面试到这里就结束了。 关注我,带你走进二师兄的C++面试生涯。
关注我,带你21天“精通”C++!(狗头)
下一篇:最后一页
1、博尔特百米冲刺9 58秒,这样的速度确实吓人,不过也仅是相对人类自
欢迎观看本篇文章,小升来为大家解答以上问题。如何给c盘瘦身,今天小
6月12日上午6时许,南宁市消防救援支队指挥中心接到群众报警,在横州市
高考评卷工作全面展开多地公布放榜时间,高考成绩,高考,招生,招生考试,
想必现在有很多小伙伴对于宫锁珠帘里面的主题歌叫什么名字方面的知识都
关于天然气减压阀的工作原理视频,天然气减压阀这个很多人还不知道,现
创意手工和廉洁文化在“学习小站”相遇---湖北日报讯(通讯员吴逸)近
游戏发行商日前开设了全新工作室Cover6Studios,以帮助开发商Expressio
1、美的电热油汀NY2313-11GT是美的品牌公司旗下的一款电热油汀。2、摆
6月12日,光伏业内爆出消息,称中建材浚鑫科技有限公司、江苏润达光伏科
X 关闭
粤省事App“团体码”服务升级 “指尖管”更便捷
福建不强制学生统一参加中小学课后服务
浙江柯桥本轮疫情为2起独立疫情 2人有进口快递接触史
河南新增本土确诊病例1例 本土无症状感染者28例
黑龙江本土感染者清零
5月24日0时至24时 天津新增17名本土阳性感染者
X 关闭