C++面试题整理 2
8. C++11新特性又哪些
自动类型推导auto,智能指指针(share_ptr,unique_ptr等),for循环简化,线程相关的(std::thread/std::mutex),空指针nullptr,lambda表达式,等等
9. share_ptr是线程安全的吗
share_ptr里包含引用计数和数据指针,引用计数是原子操作,线程安全的,但是改变数据指针的指向,后导致引用技术加减,并不是线程安全的。设想当一个share_ptr的引用计数为1,这时两个线程同时对它赋值,改变其数据指向,则会引起引用计数减小2次,引起crash。
10. 线程间同步有哪些方法
主要有锁/临界区(lock/mutex),条件变量(condition variable)和future。
- std::unique_lock<std::mutex>或 std::lock_guard<std::mutex>可以保证一次只有一个线程访问临界区
- std::condition_variable 可以通过wait方法阻塞线程,另一个线程可以通过Notify方法进行通知
- std::future配合std::async使用,可以异步开启线程,并存储返回结果,另一线程通过future的wait或get方法可以阻塞线程,直至结果返回。
参考资料:
11. 虚函数多态的实现机制
虚函数多态主要指的是基类指针(引用)调用虚函数,若基类指针(引用)指向的是派生类,则自动调用派生类的虚函数。其实现机制是通过虚函数表和虚表指针。在含有虚函数的类编译时,会自动生成相应的虚函数表和虚表指针,虚函数表里对于派生类重写的虚函数,会替换成重写后的虚函数地址。这样派生类赋值给基类时,实际上是基类之类指向的是派生类的虚表指针和虚函数表,调用的就是派生类的虚函数了。
12. 子类构造函数中调用虚函数会怎么样
子类在构造时会先调用父类构造,再调用子类构造,所以在子类中调用虚函数,如果子类重写了,会调用重写后的子类函数,没有重写的话,仍会调用父类函数。
- 注意:如果在父类构造中调用虚函数,则子类继承后总会调用父类的虚函数,如果虚函数为纯虚,会产生链接错误。
另外尽量不要在构造中调用虚函数,参见《effective C++》条款9--绝不在构造和析构过程中调用virtual函数
13. 介绍下C++ 11中的移动语义
移动语义即std::move关键字的使用,配合移动构造,可以将临时变量直接进行构造,节省一次赋值操作和临时变量的析构,提高了效率。
14. std::vector中插入元素的push_back与embrace_back有什么区别
embrace_back是C++11中新的接口,由于C++11有了移动语义,对于vector中插入元素,也用移动语义重写了,对于临时元素可以移动构造,节省了空间,提高了效率
更多
C++面试题整理 2的更多相关文章
- 【web前端面试题整理06】成都第一弹,邂逅聚美优品
前言 上周四回了成都,休息了一下下,工作问题还是需要解决的,于是今天去面试了一下,现在面试回来了,我感觉还是可以整理一下心得. 这个面试题整理系列是为了以后前端方面的兄弟面试时候可以得到一点点帮助,因 ...
- C++ 面试题整理
我和朋友们面到的c++试题整理 虚表 static const sizeof 可构造不可继承的类 stl Iterator失效 map vector vector的removed_if 优化 ---- ...
- Touch事件or手机卫士面试题整理回答(二)
Touch事件or手机卫士面试题整理回答(二) 自定义控件 1. Touch事件的传递机制 顶级View->父View->子View,不处理逆向返回 OnInterceptTouchEve ...
- 尚学堂Java面试题整理
博客分类: 经典分享 1. super()与this()的差别? - 6 - 2. 作用域public,protected,private,以及不写时的差别? - 6 - 3. 编程输出例如以 ...
- 【JAVA面试】java面试题整理(4)
版权声明:转载请注明 https://blog.csdn.net/qq_33591903/article/details/83473779 ...
- 北京Java笔试题整理
北京Java笔试题整理 1.什么是java虚拟机?为什么ava被称作是"平台无关的编程语言? 答:Java虚拟机可以理解为一个特殊的"操作系统",只是它连接的不是硬件,而 ...
- Java笔试面试题整理第八波
转载至:http://blog.csdn.net/shakespeare001/article/details/51388516 作者:山代王(开心阳) 本系列整理Java相关的笔试面试知识点,其他几 ...
- Java笔试面试题整理第六波(修正版)
转载至:http://blog.csdn.net/shakespeare001/article/details/51330745 作者:山代王(开心阳) 本系列整理Java相关的笔试面试知识点,其他几 ...
- Java笔试面试题整理第五波
转载至:http://blog.csdn.net/shakespeare001/article/details/51321498 作者:山代王(开心阳) 本系列整理Java相关的笔试面试知识点,其他几 ...
- Java笔试面试题整理第四波
转载至:http://blog.csdn.net/shakespeare001/article/details/51274685 作者:山代王(开心阳) 本系列整理Java相关的笔试面试知识点,其他几 ...
随机推荐
- centos7安装pcntl扩展
查看PHP扩展加载的目录php -i | grep extension_dir Centos下使用yum安装php默认是都不带pcntl扩展,需要安装扩展需要下载安装包,编译安装. 首先查看你的服务器 ...
- Vue 数组和对象更新,但视图未更新,背后的故事
在实际开发中,遇到遍历数组和对象,当property 发生改变时,并没有触发视图的更新今天来浅显的聊聊这背后的故事,有说的不对地方,还望指出! 本人博文地址:https://www.cnblogs.c ...
- oeasy教您玩转vim - 43 - # 替换模式
替换模式 回忆上节课内容 上次我们学到的最有用的就是c 他和d的区别就是删除之后进入到插入模式 c可以配合motion 可以用ciw来快速删除当前光标所在的单词 可i和a 配合的文字块 w wor ...
- 登录到第一级终端后,如果再次ssh登录到其他终端,SecureCRT标签变更的问题
"终端->仿真->高级",勾选"忽略窗口标题更改请求"
- 【Mybatis-Plus】制作逆向工具
官方文档可参考: https://baomidou.com/pages/779a6e/#快速入门 工具需要的依赖 <?xml version="1.0"?> <p ...
- 【Hibernate】02 快速入门
环境搭建 : Windo7 x64 + IDEA 2018+ JDK 8+ Maven 3.0+ MySQL 5.0+ 创建Hibernate工程: 导入依赖坐标 <dependencies&g ...
- PVE linux_VM 扩容分区
页面 调整磁盘大小 手动分区 fdisk -l fdisk /dev/sda 对该磁盘进行分区, 输入n并回车,n是"new"新建分区 [root@localhost ~]# fd ...
- ubuntu18.04系统环境下使用vs code安装pylint检查python的代码错误
相关: Ubuntu18.04 系统环境下 vscode中忽略pylint某些错误或警告 ============================================ python的代码错 ...
- pytorch之网络参数统计 torchstat & torchsummary
参考 : https://blog.csdn.net/weixin_45292794/article/details/108227437 https://blog.csdn.net/jzwong/ar ...
- 神经网络初始化:xavier,kaiming、ortho正交初始化在CNN网络中的使用
xavier.ortho是神经网络中常用的权重初始化方法,在全连接中这两种权重初始化的方法比较好理解,但是在CNN的卷积网络中的具体实现却不好理解了. 在CNN网络中xavier的初始化可以参看: [ ...