![](https://img-blog.csdnimg.cn/20200402093815778.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C++面试
文章平均质量分 60
将个人的面试经历中,遇到的面试题及部分知识点记录下来,一是方便自己以后面试用,二是看能否帮助到部分同行。
SunkingYang
C++资深工程师,拥有12年C++开发经验。
期间从事Windows客户端及Linux服务端开发。客户端有ActiveX、MFC、QT,医疗虚拟与现实(Ogre、QT、OpenCV等),三维人脸识别。
拥有4年天网视频监控开发经验,包含ocx插件开发、国标解码库:软解码和硬解码开发等(Windows平台),2年雪亮工程国标服务开发经验,包含国标28181级联服务、国标流媒体等(Linux平台)。
展开
-
RepidJson将内容格式化后写入文件
在上面的示例代码中,我们使用Document类创建了一个JSON文档,并使用AddMember()方法添加了几个键值对。然后,我们使用PrettyWriter类将JSON内容格式化为漂亮的字符串,并将其写入example.json文件中。你可以根据你的需要修改键值对的值,或者在JSON文档中添加、删除或修改键值对。原创 2023-12-05 19:51:11 · 1128 阅读 · 0 评论 -
数据库学习资料大全
文章来源:http://www.cnblogs.com/changton/archive/2011/08/23/115774.htmlAccess AccessQQ http://www.accessqq.com/ Access是微软数据库开发平台,QQ是一个聊天工具,该站之所以叫accessQQ,是想营造一 种只聊Access的氛围,达到推广Access普及和相关资源共享转载 2015-01-06 21:11:42 · 716 阅读 · 0 评论 -
三十分钟掌握STL
文章来源:http://net.pku.edu.cn/~yhf/UsingSTL.htm这是本小人书。原名是《using stl》,不知道是谁写的。不过我倒觉得很有趣,所以化了两个晚上把它翻译出来。我没有对翻译出来的内容校验过。如果你没法在三十分钟内觉得有所收获,那么赶紧扔了它。文中我省略了很多东西。心疼那,浪费我两个晚上。译者:karycontact:karymay@163.net原创 2015-03-27 16:40:55 · 477 阅读 · 0 评论 -
二级指针的申请与释放
#include using namespace std;class A{public: A() { cout << "构造函数"; count++; cout <<count<<endl; } ~A() { cout << "析构函数"<<count<<endl; co原创 2015-01-23 12:36:37 · 974 阅读 · 0 评论 -
搜索指定文件夹下的指定文件(只能用于一级目录)
#include #include #include //包含system()函数#include using namespace std;const char *to_search = "F:\\pro\\VC++ VFW\\*.cpp"; //欲查找的文件,支持通配符*int main(){ long handle; //用于查找的句柄 string str,原创 2015-01-23 12:33:03 · 768 阅读 · 0 评论 -
进程与线程的概念、区别及各自通信方式
进程与线程的概念进程是对运行时程序的封装,是系统进行资源调度和分配的的基本单位,实现了操作系统的并发;线程是进程的子任务,是CPU调度和分派的基本单位,用于保证程序的实时性,实现进程内部的并发;线程是操作系统可识别的最小执行和调度单位。每个线程都独自占用一个虚拟处理器:独自的寄存器组,指令计数器和处理器状态。每个线程完成不同的任务,但是共享同一地址空间(也就是同样的动态内存,映射文件,目标代...原创 2020-04-03 18:01:19 · 590 阅读 · 0 评论 -
C++中new和malloc的区别(C++面试常问题目)
new分配内存按照数据类型进行分配,malloc分配内存按照指定的大小分配;new返回的是指定对象的指针,而malloc返回的是void*,因此malloc的返回值一般都需要进行类型转化。new不仅分配一段内存,而且会调用构造函数,malloc不会。new分配的内存要用delete销毁,malloc要用free来销毁;delete销毁的时候会调用对象的析构函数,而free则不会。new...原创 2020-04-03 17:52:25 · 472 阅读 · 0 评论 -
C++的内存管理机制
在C++中,虚拟内存分为代码段、数据段、BSS段、堆区、文件映射区以及栈区六部分。代码段:包括只读存储区和文本区,其中只读存储区存储字符串常量,文本区存储程序的机器代码。数据段:存储程序中已初始化的全局变量和静态变量bss 段:存储未初始化的全局变量和静态变量(局部+全局),以及所有被初始化为0的全局变量和静态变量。堆区:调用new/malloc函数时在堆区动态分配内存,同时需要...原创 2020-04-03 17:50:13 · 402 阅读 · 0 评论 -
C++中STL的vector和list有什么区别,如何应用
概念:Vector连续存储的容器,动态数组,在堆上分配空间底层实现:数组两倍容量增长:vector 增加(插入)新元素时,如果未超过当时的容量,则还有剩余空间,那么直接添加到最后(插入指定位置),然后调整迭代器。如果没有剩余空间了,则会重新配置原有元素个数的两倍空间,然后将原空间元素通过复制的方式初始化新空间,再向新空间增加元素,最后析构并释放原空间,之前的迭代器会失效。性能...原创 2020-04-03 17:46:45 · 628 阅读 · 0 评论 -
C++ STL中,map和set有什么区别,分别又是怎么实现的?
map和set都是C++的关联容器,其底层实现都是红黑树(RB-Tree)。由于 map 和set所开放的各种操作接口,RB-tree 也都提供了,所以几乎所有的 map 和set的操作行为,都只是转调 RB-tree 的操作行为。map和set区别在于:(1)map中的元素是key-value(关键字—值)对:关键字起到索引的作用,值则表示与索引相关联的数据;Set与之相对就是关键字的简单集...原创 2020-04-03 17:42:09 · 5484 阅读 · 0 评论 -
C++四种类型转换(reinterpret_cast、dynamic_cast、const_cast、static_cast)描述
reinterpret_cast:可以用于任意类型的指针之间的转换,对转换的结果不做任何保证。dynamic_cast:这种其实也是不被推荐使用的,更多使用static_cast,dynamic本身只能用于存在虚函数的父子关系的强制类型转换,对于指针,转换失败则返回nullptr,对于引用,转换失败会抛出异常。const_cast:对于未定义const版本的成员函数,我们通常需要使用con...原创 2020-04-03 17:40:36 · 342 阅读 · 0 评论 -
哪类析构函数必须是虚函数,为什么?为什么C++默认的析构函数不是虚函数?
将可能会被继承的父类的析构函数设置为虚函数,可以保证当我们new一个子类,然后使用基类指针指向该子类对象,释放基类指针时可以释放掉子类的空间,防止内存泄漏。C++默认的析构函数不是虚函数是因为虚函数需要额外的虚函数表和虚表指针,占用额外的内存。而对于不会被继承的类来说,其析构函数如果是虚函数,就会浪费内存。因此C++默认的析构函数不是虚函数,而是只有当需要当作父类时,设置为虚函数。...原创 2020-04-03 17:37:27 · 4139 阅读 · 2 评论 -
智能指针有没有内存泄露的情况?
当两个对象相互使用一个shared_ptr成员变量指向对方,会造成循环引用,使引用计数失效,从而导致内存泄漏。上述代码中,parent有一个shared_ptr类型的成员指向孩子,而child也有一个shared_ptr类型的成员指向父亲。然后在创建孩子和父亲对象时也使用了智能指针c和p,随后将c和p分别又赋值给child的智能指针成员parent和parent的智能指针成员child。...原创 2020-04-03 17:34:55 · 1745 阅读 · 0 评论 -
如何解决智能指针的内存泄漏
为了解决循环引用导致的内存泄漏,引入了weak_ptr弱指针,weak_ptr的构造函数不会修改引用计数的值,从而不会对对象的内存进行管理,其类似一个普通指针,但不指向引用计数的共享内存,但是其可以检测到所管理的对象是否已经被释放,从而避免非法访问。...原创 2020-04-03 17:30:29 · 987 阅读 · 0 评论 -
C++中的智能指针介绍
智能指针主要用于管理在堆上分配的内存,它将普通的指针封装为一个栈对象。当栈对象的生存周期结束后,会在析构函数中释放掉申请的内存,从而防止内存泄漏。C++ 11中最常用的智能指针类型为shared_ptr,它采用引用计数的方法,记录当前内存资源被多少个智能指针引用。该引用计数的内存在堆上分配。当新增一个时引用计数加1,当过期时引用计数减一。只有引用计数为0时,智能指针才会自动释放引用的内存资源。对...原创 2020-04-03 17:27:22 · 265 阅读 · 0 评论 -
c++中的smart pointer四个智能指针简单介绍
C++里面的四个智能指针: auto_ptr, shared_ptr, weak_ptr, unique_ptr 其中后三个是c++11支持,并且第一个已经被11弃用。为什么要使用智能指针:智能指针的作用是管理一个指针,因为存在以下这种情况:申请的空间在函数结束时忘记释放,造成内存泄漏。使用智能指针可以很大程度上的避免这个问题,因为智能指针就是一个类,当超出了类的作用域是,类会自动调用析构函数...原创 2020-04-03 17:23:56 · 704 阅读 · 0 评论 -
C++11最常用的新特性
C++11 最常用的新特性如下:auto关键字:编译器可以根据初始值自动推导出类型。但是不能用于函数传参以及数组类型的推导。nullptr关键字:nullptr是一种特殊类型的字面值,它可以被转换成任意其它的指针类型;而NULL一般被宏定义为0,在遇到重载时可能会出现问题。智能指针:C++11新增了std::shared_ptr、std::weak_ptr等类型的智能指针,用于解决内存管理...原创 2020-04-03 17:15:34 · 288 阅读 · 0 评论 -
C/C++面试宝典2024版(最新版)
面试基础前言new、delete、malloc、free关系delete与 delete []区别C和C++ 的共同点?不同之处?继承的优缺点C++有哪些性质(面向对象特点)子类析构时要调用父类的析构函数吗?多态,虚函数,纯虚函数求下面函数的返回值(微软)什么是“引用”?申明和使用“引用”要注意哪些问题?将“引用”作为函数参数有哪些特点?在什么时候需要使用“常引用”?将“引用”作为函数返回值类型的...原创 2020-04-02 11:55:07 · 30077 阅读 · 3 评论