
C++ 面试专栏
文章平均质量分 83
在这个专栏中,我会为大家整理一些常考的 C++ 面试题~
Pandaconda 的测开之路
名不显时心不朽,再挑灯火看文章。
曾任职于字节跳动服务端开发岗,现任职于字节跳动测试开发岗。
专注于分享自己的学习踩坑之路,尽全力将知识转换成易懂的形式吐出来,帮助新人能够快速入门,老手也可以当字典参考。欢迎一起讨论,共同成长!
展开
-
【C++ 面试 - 新特性】每日 3 题(十一)
✍个人博客:Pandaconda-优快云博客📣专栏地址:http://t.csdnimg.cn/fYaBd📚专栏简介:在这个专栏中,我将会分享 C++ 面试中常见的面试题给大家~原创 2024-09-12 09:35:07 · 1087 阅读 · 0 评论 -
【C++ 面试 - 新特性】每日 3 题(九)
✍个人博客:Pandaconda-优快云博客📣专栏地址:http://t.csdnimg.cn/fYaBd📚专栏简介:在这个专栏中,我将会分享 C++ 面试中常见的面试题给大家~原创 2024-09-10 21:11:31 · 781 阅读 · 0 评论 -
【C++ 面试 - 新特性】每日 3 题(八)
✍个人博客:Pandaconda-优快云博客📣专栏地址:http://t.csdnimg.cn/fYaBd📚专栏简介:在这个专栏中,我将会分享 C++ 面试中常见的面试题给大家~原创 2024-09-10 21:09:16 · 761 阅读 · 0 评论 -
【C++ 面试 - 新特性】每日 3 题(七)
绑定器本身还是一个函数对象function:绑定器,函数对象,lambda表达式 它们只能使用在一条语句中class Testpublic: //调成员方法必须依赖一个对象 void (Test::*pfunc)(string)int main()func1();return 0;cin >> x;cout原创 2024-09-09 21:22:28 · 1216 阅读 · 0 评论 -
【C++ 面试 - 新特性】每日 3 题(六)
✍个人博客:Pandaconda-优快云博客📣专栏地址:http://t.csdnimg.cn/fYaBd📚专栏简介:在这个专栏中,我将会分享 C++ 面试中常见的面试题给大家~原创 2024-09-09 21:20:20 · 1426 阅读 · 0 评论 -
【C++ 面试 - 新特性】每日 3 题(五)
✍个人博客:Pandaconda-优快云博客📣专栏地址:http://t.csdnimg.cn/fYaBd📚专栏简介:在这个专栏中,我将会分享 C++ 面试中常见的面试题给大家~原创 2024-09-07 06:57:33 · 582 阅读 · 0 评论 -
【C++ 面试 - 新特性】每日 3 题(四)
✍个人博客:Pandaconda-优快云博客📣专栏地址:http://t.csdnimg.cn/fYaBd📚专栏简介:在这个专栏中,我将会分享 C++ 面试中常见的面试题给大家~原创 2024-09-07 06:55:10 · 699 阅读 · 0 评论 -
【C++ 面试 - 新特性】每日 3 题(三)
上面的写法一个不好的地方就是 class 自定义删除类万一只用一次,那就挺占空间的,代码就需要一直放到上面,有多少不同的类型就要写多少自定义删除类。delete[]p;fclose(p);原创 2024-09-06 19:03:46 · 554 阅读 · 0 评论 -
【C++ 面试 - 新特性】每日 3 题(二)
✍个人博客:Pandaconda-优快云博客📣专栏地址:http://t.csdnimg.cn/fYaBd📚专栏简介:在这个专栏中,我将会分享 C++ 面试中常见的面试题给大家~原创 2024-09-06 19:01:59 · 989 阅读 · 0 评论 -
【C++ 面试 - 新特性】每日 3 题(一)
✍个人博客:Pandaconda-优快云博客📣专栏地址:http://t.csdnimg.cn/fYaBd📚专栏简介:在这个专栏中,我将会分享 C++ 面试中常见的面试题给大家~原创 2024-09-05 21:22:26 · 941 阅读 · 0 评论 -
【C++ 面试 - STL】每日 3 题(九)
✍个人博客:Pandaconda-优快云博客📣专栏地址:http://t.csdnimg.cn/fYaBd📚专栏简介:在这个专栏中,我将会分享 C++ 面试中常见的面试题给大家~原创 2024-09-05 21:18:40 · 1205 阅读 · 0 评论 -
【C++ 面试 - STL】每日 3 题(八)
✍个人博客:Pandaconda-优快云博客📣专栏地址:http://t.csdnimg.cn/fYaBd📚专栏简介:在这个专栏中,我将会分享 C++ 面试中常见的面试题给大家~原创 2024-09-04 21:40:05 · 632 阅读 · 0 评论 -
【C++ 面试 - STL】每日 3 题(七)
✍个人博客:Pandaconda-优快云博客📣专栏地址:http://t.csdnimg.cn/fYaBd📚专栏简介:在这个专栏中,我将会分享 C++ 面试中常见的面试题给大家~原创 2024-09-04 21:36:45 · 1033 阅读 · 0 评论 -
【C++ 面试 - STL】每日 3 题(六)
✍个人博客:Pandaconda-优快云博客📣专栏地址:http://t.csdnimg.cn/fYaBd📚专栏简介:在这个专栏中,我将会分享 C++ 面试中常见的面试题给大家~原创 2024-09-03 21:35:33 · 730 阅读 · 0 评论 -
【C++ 面试 - STL】每日 3 题(五)
✍个人博客:Pandaconda-优快云博客📣专栏地址:http://t.csdnimg.cn/fYaBd📚专栏简介:在这个专栏中,我将会分享 C++ 面试中常见的面试题给大家~原创 2024-09-03 21:33:08 · 1531 阅读 · 0 评论 -
【C++ 面试 - STL】每日 3 题(四)
✍个人博客:Pandaconda-优快云博客📣专栏地址:http://t.csdnimg.cn/fYaBd📚专栏简介:在这个专栏中,我将会分享 C++ 面试中常见的面试题给大家~原创 2024-09-02 22:40:46 · 1213 阅读 · 0 评论 -
【C++ 面试 - STL】每日 3 题(三)
✍个人博客:Pandaconda-优快云博客📣专栏地址:http://t.csdnimg.cn/fYaBd📚专栏简介:在这个专栏中,我将会分享 C++ 面试中常见的面试题给大家~原创 2024-09-02 22:36:37 · 1384 阅读 · 0 评论 -
【C++ 面试 - STL】每日 3 题(二)
增加元素:size() 函数返回的是已用空间大小,capacity() 返回的是总空间大小,capacity() - size() 则是剩余的可用空间大小。当 size() 和 capacity() 相等,说明 vector 目前的空间已被用完,如果再添加新元素,则会引起 vector 空间的动态增长。由于动态增长会引起重新分配内存空间、拷贝原空间、释放原空间,这些过程会降低程序效率。因此,可以使用 reserve(n) 预先分配一块较大的指定大小的内存空间,这样当指定大小的内存空间未使用完时,是不会重新分原创 2024-08-31 10:00:25 · 2347 阅读 · 1 评论 -
【C++ 面试 - STL】每日 3 题(一)
标准模板库(Standard Template Library,简称 STL)简单说,就是一些常用数据结构和算法的模板的集合。广义上讲,STL 分为 3 类:Algorithm(算法)、Container(容器)和 Iterator(迭代器),容器和算法通过迭代器可以进行无缝地连接。详细的说,STL 由 6 部分组成:容器(Container)、算法(Algorithm)、迭代器(Iterator)、仿函数(Function object)、适配器(Adaptor)、空间配制器(Allocator)。 标原创 2024-08-31 09:57:45 · 2235 阅读 · 0 评论 -
【C++ 面试 - 内存管理】每日 3 题(十一)
📚专栏简介:在这个专栏中,我将会分享 C++ 面试中常见的面试题给大家~当操作系统没有足够的可用内存时,new 和 malloc 都可能会失败。这通常发生在系统资源紧张的情况下,例如在同时运行多个大型程序时。内存碎片是指已分配的内存块之间存在未分配的小块,这可能会使大块内存无法分配。如果内存被分配和释放的方式不同,或者程序不断分配和释放内存,可能会导致内存碎片化,使得 new 和 malloc 无法成功分配所需的连续内存块。有些操作系统可能会限制进程可用的最大内存量或者单个内存块的最大大小。原创 2024-08-30 20:54:59 · 1265 阅读 · 0 评论 -
【C++ 面试 - 内存管理】每日 3 题(十)
内存池(Memory Pool) 是一种内存分配方式。通常我们习惯直接使用 new、malloc 等申请内存,这样做的缺点在于:由于所申请内存块的大小不定,当频繁使用时会造成大量的内存碎片并进而降低性能。内存池则是在真正使用内存之前,先申请分配一定数量的、大小相等 (一般情况下) 的内存块留作备用。当有新的内存需求时,就从内存池中分出一部分内存块, 若内存块不够再继续申请新的内存。这样做的一个显著优点是尽量避免了内存碎片,使得内存分配效率得到提升。这里简单描述一下《STL 源码剖析》中的内存池实现机制:al原创 2024-08-30 20:52:20 · 1625 阅读 · 0 评论 -
【C++ 面试 - 内存管理】每日 3 题(九)
内存泄漏是指程序在动态分配内存后,没有及时释放,导致内存使用持续增长的情况。而使用 try-catch 块包裹整个主循环,并不能解决内存泄漏的问题。try-catch 块主要用于捕捉和处理异常,而内存泄漏不会抛出异常,因此 try-catch 不能捕捉到内存泄漏问题。内存泄漏通常是由于程序逻辑错误、资源管理不当等造成的,try-catch 块只能处理那些抛出异常的情况。如果主循环发生内存泄漏,即使使用 try-catch 捕捉到了相关异常,也并不能解决内存泄漏的问题。原创 2024-08-29 20:42:15 · 1234 阅读 · 0 评论 -
【C++ 面试 - 内存管理】每日 3 题(八)
堆内存是指程序从堆中分配的,大小任意的 (内存块的大小可以在程序运行期决定) 内存块,使用完后必须显式释放的内存。3、 需要在 new[] 一个对象数组时,需要保存数组的维度,C++ 的做法是在分配数组空间时多分配了 4 个字节的大小,专门保存数组的大小,在 delete [] 时就可以取出这个保存的数,就知道了需要调用析构函数多少次了。使用 new 或者 malloc 时,让该数 +1,delete 或 free 时,该数 -1,程序执行完打印这个计数,如果不为 0 则表示存在内存泄露。原创 2024-08-29 20:40:48 · 1467 阅读 · 0 评论 -
【C++ 面试 - 内存管理】每日 3 题(七)
placement new 构造起来的对象数组,要显式的调用他们的析构函数来销毁(析构函数并不释放对象的内存),千万不要使用 delete,这是因为 placement new 构造起来的对象或数组大小并不一定等于原来分配的内存大小,使用 delete 会造成内存泄漏或者之后释放内存时出现运行时错误。4、 new 在内存分配上面有一些局限性,new 的机制是将内存分配和对象构造组合在一起,同样的,delete 也是将对象析构和内存释放组合在一起的。在空间分配失败的情况下,抛出异常。原创 2024-08-28 20:28:31 · 909 阅读 · 0 评论 -
【C++ 面试 - 内存管理】每日 3 题(六)
📚专栏简介:在这个专栏中,我将会分享 C++ 面试中常见的面试题给大家~原创 2024-08-28 20:23:18 · 747 阅读 · 0 评论 -
【C++ 面试 - 内存管理】每日 3 题(五)
📚专栏简介:在这个专栏中,我将会分享 C++ 面试中常见的面试题给大家~原创 2024-08-27 21:28:11 · 1038 阅读 · 0 评论 -
【C++ 面试 - 内存管理】每日 3 题(四)
📚专栏简介:在这个专栏中,我将会分享 C++ 面试中常见的面试题给大家~原创 2024-08-27 21:25:51 · 682 阅读 · 0 评论 -
【C++ 面试 - 内存管理】每日 3 题(二)
2、 每个变量相对于起始位置的偏移量必须是该变量类型大小的整数倍,不是整数倍空出内存,直到偏移量是整数倍为止。未特殊说明时,按结构体中 size 最大的成员对齐(若有 double 成员,按 8 字节对齐。3、 最后整个结构体的大小必须是里面变量类型最大值的整数倍。整体大小要是 n 和最大变量大小中较小值的整数倍。1、 分配内存的顺序是按照声明的顺序。原创 2024-08-26 21:29:58 · 484 阅读 · 0 评论 -
【C++ 面试 - 内存管理】每日 3 题(一)
C++ 中的内存分区,分别是堆、栈、自由存储区、全局/静态存储区、常量存储区和代码区。 栈:在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。堆:就是那些由 malloc 等分配的内存块,和堆是十分相似的,不过是用 free 来结束自己的生命(new 也可以在堆上分配内存)。自由存储区:就是那些由分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个就要对应一个。如果程序员没原创 2024-08-25 13:25:29 · 1154 阅读 · 0 评论 -
【C++ 面试 - 面向对象】每日 3 题(十三)
带有默认构造函数的类成员对象,如果一个类没有任何构造函数,但它含有一个成员对象,而后者有默认构造函数,那么编译器就为该类合成出一个默认构造函数。如果一个类 A 含有多个成员类对象的话,那么类 A 的每一个构造函数必须调用每一个成员对象的默认构造函数而且必须按照类对象在类 A 中的声明顺序进行;带有默认构造函数的基类,如果一个没有任何构造函数的派生类派生自一个带有默认构造函数基类,那么该派生类合成一个构造函数调用上一层基类的默认构造函数;合成的默认构造函数中,只有基类子对象和成员类对象会被初始化。原创 2024-08-25 13:23:31 · 530 阅读 · 0 评论 -
【C++ 面试 - 面向对象】每日 3 题(十二)
为了避免这些问题,通常建议在析构函数中处理异常或者避免执行会抛出异常的函数,可以在析构函数中使用 try-catch 块来捕获和处理潜在的异常,确保资源得到正确释放和清理保证程序的稳定性和健壮性。在执行语句 1 时,会提示 new 方法已经被删除,如果将 new 设置为私有方法,则会报惨不忍睹的错误,因此使用 delete 关键字可以更加人性化的删除一些默认方法。对象存在,用别的对象给它赋值,这属于重载 "=" 号运算符的范畴,"=" 号两侧的对象都是已存在的。因此会造成内存泄漏。原创 2024-08-24 11:19:09 · 984 阅读 · 0 评论 -
【C++ 面试 - 面向对象】每日 3 题(十一)
我们用对象 a 初始化对象 b,后对象 a 我们就不再使用了,但是对象 a 的空间还在呀(在析构之前),既然拷贝构造函数,实际上就是把 a 对象的内容复制一份到 b 中,那么为什么我们不能直接使用 a 的空间呢?避免的方法就是将第一个指针(比如 a->value)置为 NULL,这样在调用析构函数的时候,由于有判断是否为 NULL 的语句,所以析构 a 的时候并不会回收 a->value 指向的空间;我们都知道,C++ 的赋值操作是会产生临时对象的,临时对象的出现会降低程序的效率。② 成员类对象构造函数。原创 2024-08-24 11:17:14 · 998 阅读 · 0 评论 -
【C++ 面试 - 面向对象】每日 3 题(十)
C++ 中的构造函数可以分为 4 类:默认构造函数初始化构造函数(有参数)拷贝构造函数移动构造函数(move 和右值引用)委托构造函数转换构造函数举个例子: 默认构造函数和初始化构造函数在定义类的对象,完成对象的初始化工作复制构造函数用于复制本类的对象转换构造函数用于将其他类型的变量,隐式转换为本类对象C++11 引入了委托构造的概念,某个类型的一个构造函数可以委托同类型的另一个构造函数对对象进行初始化。为了描述方便我们称前者为委托构造函数,后者为目标构造函数。委托构造函数会将控制权交给目标构造原创 2024-08-23 19:08:00 · 829 阅读 · 0 评论 -
【C++ 面试 - 面向对象】每日 3 题(九)
如果功能的接口由团队 A(或者是一个通用的功能提供者)来定义,而团队 B 负责实际的功能实现,那么通常情况下虚函数应该添加到基类中。团队 A 定义基类,其中包含虚函数声明,但不提供实现,或直接提供纯虚函数。团队 B 创建派生类,继承自基类,并重写虚函数以提供特定功能的实现。这种方式允许团队 A 定义接口规范,而团队 B 则根据规范来实现功能。原创 2024-08-23 19:05:50 · 834 阅读 · 0 评论 -
【C++ 面试 - 面向对象】每日 3 题(八)
同时,virtual function 的实现大多利用了一个 “虚函数表” 的东西,这种实现中一个类的内存布局 (或者说虚函数表的内存布局) 需要在这个类编译完成的时候就被完全确定。虚函数表是针对类的,类的所有对象共享这个类的虚函数表,因为每个对象内部都保存一个指向该类虚函数表的指 针 vptr ,每个对象的 vptr 的存放地址都不同,但都指向同一虚函数表。问题的意思是,为什么在 C++ 里面,一个类的成员函数不能既是 template 又是 virtual 的。原创 2024-08-22 21:19:51 · 468 阅读 · 0 评论 -
【C++ 面试 - 面向对象】每日 3 题(七)
静态类型:对象在声明时采用的类型,在编译期既已确定;动态类型:通常是指一个指针或引用目前所指对象的类型,是在运行期决定的;静态绑定(早绑定):绑定的是静态类型,所对应的函数或属性依赖于对象的静态类型,发生在编译期;动态绑定(晚绑定):绑定的是动态类型,所对应的函数或属性依赖于对象的动态类型,发生在运行期;原创 2024-08-22 21:18:00 · 1401 阅读 · 0 评论 -
【C++ 面试 - 面向对象】每日 3 题(六)
虚函数是为了实现动态编联产生的,目的是通过基类类型的指针指向不同对象时,自动调用相应的、和基类同名的函数(使用同一种调用形式,既能调用派生类又能调用基类的同名函数)。,每个含有虚函数的类中都有一个虚函数表,该虚函数表存储着该类的所有的虚函数的地址。既然是虚函数,它的函数指针会被存在虚函数表中,由于纯虚函数并没有具体的函数体,因此它在虚函数表中的值就为 0,而具有函数体的虚函数则是函数的具体地址。,内联函数表示在编译阶段进行函数体的替换操作,而虚函数意味着在运行期间进行类型确定,所以内联函数不能是虚函数。原创 2024-08-21 20:40:05 · 1432 阅读 · 0 评论 -
【C++ 面试 - 面向对象】每日 3 题(五)
虚函数表存储虚函数的地址,即虚函数表的元素是指向类成员函数的指针,而类中虚函数的个数在编译时期可以确定,即虚函数表的大小可以确定,即大小是在编译时期确定的,不必动态分配内存空间存储虚函数表,所以不在堆中。关键字,在派生类中重写该函数,运行时将会根据所指对象的实际类型来调用相应的函数,如果对象类型是派生类,就调用派生类的函数,如果对象类型是基类,就调用基类的函数。,指向对象所属类的虚表。一个类只有虚函数才会存在虚函数表,同属于一个类的对象共享虚函数表,但是有各自的虚函数表指针(当然,这个内容是相同的)。原创 2024-08-21 20:31:42 · 1274 阅读 · 0 评论 -
【C++ 面试 - 面向对象】每日 3 题(四)
this 实际上是成员函数的一个形参,在调用成员函数时将对象的地址作为实参传递给 this。不过 this 这个形参是隐式的,它并不出现在代码中,而是在编译阶段由编译器默默地将它添加到参数列表中。this 作为隐式形参,本质上是成员函数的局部变量,所以只能用在成员函数的内部,并且只有在通过对象调用成员函数时才给 this 赋值。成员函数最终被编译成与对象无关的普通函数,除了成员变量,会丢失所有信息,所以编译时要在成员函数中添加一个额外的参数,把当前对象的首地址传入,以此来关联成员函数和成员变量。原创 2024-08-20 20:53:22 · 967 阅读 · 0 评论 -
【C++ 面试 - 面向对象】每日 3 题(三)
📚专栏简介:在这个专栏中,我将会分享 C++ 面试中常见的面试题给大家~C 语言中不允许有同名函数,因为编译时函数命名是一样的,不像 C++ 会添加参数类型和返回类型作为函数编译后的名称,进而实现重载。如果要用 C 语言显现函数重载,可通过以下方式来实现:使用函数指针来实现,重载的函数不能使用同名称,只是类似的实现了函数重载功能重载函数使用可变参数,方式如打开文件 open 函数gcc 有内置函数,程序使用编译函数可以实现函数重载。原创 2024-08-20 20:49:46 · 734 阅读 · 0 评论