![](https://img-blog.csdnimg.cn/20190927151101105.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
c++面试和小知识
整理C++相关知识 用于查漏补缺
橘子味的茶二
我像一粒尘埃
展开
-
内存泄漏-消失的析构函数
C++特性 在用子类给父类对象实例化的时候会导致析构的时候只调用父类的析构函数。而且注意保持好习惯 需要作为基类的函数最好加上virtual。可以看见case3并没有调用子类析构函数。在父类前面加上virtual即可。会导致子类中的内存没法释放而。原创 2022-10-13 12:01:38 · 229 阅读 · 0 评论 -
C语言中的可变参数
总结:读取可变参数的过程其实就是在堆栈中,使用指针,遍历堆栈段中的参数列表,从低地址到高地址一个一个地把参数内容读出来的过程·(因为入栈是从高地址向低地址入栈,出栈就从低地址向高地址出栈,先入后出)原创 2024-02-18 12:36:25 · 788 阅读 · 0 评论 -
stl容器总结
整合stl相关链接原创 2024-01-07 20:42:15 · 325 阅读 · 0 评论 -
记录一下之前面试被问的 用线程循环输出ABC现在写出来了
【代码】记录一下之前面试被问的 用线程循环输出ABC现在写出来了。原创 2023-09-13 22:17:32 · 56 阅读 · 0 评论 -
面试题 --内联函数相关
1:为什么引入内联函数2: 为什么inline能够很好的取代表达式形式的预定义3:说明内联函数的使用场景4:为什么不把所有函数都定义成内联函数5 :内联函数和宏有什么区别原创 2023-09-11 11:54:39 · 36 阅读 · 0 评论 -
面试题查漏补缺 i++和 ++ i哪个效率更高
在这里声明,简单地比较前缀自增运算符和后缀自增运算符的效率是片面的,因为存在很多因素影响这个问题的答案。首先考虑内建数据类型的情况:如果自增运算表达式的结果没有被使用,而是仅仅简单地用于增加一员操作数,答案是明确的,前缀法和后缀法没有任何区别,编译器的处理都应该是相同的,很难想象得出有什么编译器实现可以别出心裁地在二者之间制造任何差异。(2)i++ 总是要创建一个临时对象,在退出函数时还要销毁它,而且返回临时对象的值时还会调用其拷贝构造函数,导致在大对象的时候产生了较大的复制开销,引起效率降低。原创 2023-09-05 09:18:53 · 1929 阅读 · 0 评论 -
堆内存和栈内存的区别
栈内存是为线程流出来的临时空间,每一个线程都有它的临时空间,而且每一个栈都只能被当前的线程访问。所以它是线程安全的。栈内存的分配和回收是由系统完成的。当函数调用的时候 系统就会为这个函数分配栈空间,当函数返回后系统就会回收这片空间。同理当其他函数被调用和返回的时候 也会被自动分配和回收平时用malloc和new 分配的空间就是堆内存 堆内存可以被动态调整,空间被程序员动态分配。第一个缺点就是可能产生内存泄漏。malloc后的内存没有被free。第二个缺点就是可能产生内存碎片。原创 2023-08-22 20:22:21 · 115 阅读 · 0 评论 -
C++什么时候生成默认的拷贝构造函数
编译器编译的时候生成 ,为什么生成,为什么要生成,因为不得不生成(为了避免以下问题)。1.堆上的资源 同一个地址(如果析构这个对象的时候 释放了堆上的资源 很严重)a.类成员变量也是一个类,该成员类有默认拷贝构造函数。b.类继承自一个基类,该基类有默认拷贝构造函数。2.维护了一个文件句柄 比如socket对象。d. 类继承自基类 基类中有虚函数。什么时候生成默认拷贝构造函数?b. 函数传参 形参为类对象。如果不提供 那么就是位拷贝。什么时候触发拷贝构造函数?c. 类成员中有虚函数。原创 2023-08-21 22:38:29 · 110 阅读 · 0 评论 -
虚函数表和虚函数表指针的创建时机
背景虚函数主要是用来实现多态的虚函数在具体使用的时候才知道使用的是哪一个函数如果虚函数指向的是子类 那么就从子类的虚函数表里面去找函数如果指向的是父类 那么就从父类的虚函数表里面去找函数。原创 2023-08-21 20:00:30 · 243 阅读 · 0 评论 -
关联式容器(Associative Container)
寻找某一个特定的value的时间复杂度是对数 例如查找1000中的特定数字 你平均需要找10次 而不是 500次。其底层是由二叉树实现 每个节点都有一个父节点和两个子节点 左节点所有元素都比自己小,右节点的所有元素都比自己大。关联式容器依照特定的排序准则 自动为元素排序 元素可以是任何类型的value 也可以是。可以将set视为特殊的map 元素的value等同于key 这些容器都是由二叉树实现。注意:关联式容器的主要差别在于元素的种类以及处理重复元素的方法。1:什么是关联式容器?2:关联式容器的特点。原创 2022-11-19 20:26:09 · 376 阅读 · 0 评论 -
头文件<cstddef> <cstdlib> <cstring> 常用的定义以及函数
常量EXIT_SUCCESS和EXIT_FAILURE用作exit()的实参也可以用作main的返回值。函数memmove和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的。由于目标空间和源空间存在重叠,则无法按照预期逻辑进行赋值,故此后面设计出了memmove。如果源空间和目标空间出现重叠,就得使用memmove函数处理。在C++中给指针赋值最好使用nullptr。cstddef内的各项定义。cstdlib中的定义。原创 2022-11-19 11:59:50 · 703 阅读 · 0 评论 -
Smart point智能指针(part.1)
shared_ptr提供的default delete调用的delete 不是delete[] 当share_ptr有“由new创建的单一对象的时候"default delete才会生效。unique_ptr实现独占或者严格拥有的概念 保证同一时间内只有一个指针指向其对象,可以移交拥有权 对于因为new而创建的对象因为发生异常而忘记 调用delete很有用。Class shared_ptr多个智能指针可以指向同一个对象 当最后一个智能指针被销毁的时候 该对象和相关资源会被释放。unique_ptr提供。原创 2022-11-19 10:55:36 · 677 阅读 · 0 评论 -
C++ pair的介绍和使用输出
pair 将两个value视为一个单元 ,标准库里面多次使用这个class,尤其是容器map multimap unordered_map unorder_multimap就是使用这个class来管理其Key/value管理的元素。不完全同的时候 先比较第一个元素 再比较第二个元素 前面的元素大小优先级高。源码如下 pair实际上是一个类 里面所有的成员都是public的。只有两个pair对象内的所有元素相同 这两个对象才被堪为相同。3.pair元素之间的比较。2.pair的操作函数。原创 2022-11-15 12:56:12 · 692 阅读 · 0 评论 -
(泛式编程)函数模板和类模板
函数模板和类模板为什么需要类模板?类模板以及继承。(精选!)原创 2022-10-15 20:24:08 · 233 阅读 · 1 评论 -
C++核心编程-----多态----
为了避免因为函数名重复而导致 在子类给父类赋值时引发的错误(子类中相同的方法被顶替)原创 2022-10-13 15:51:19 · 706 阅读 · 0 评论 -
c++_确保头文件能安全使用_预处理器概述
确保头文件被多次包含仍能安全使用的常用技术是预处理器,他们由c++语言从c语言继承而来。什么是预处理器? 预处理器是编译之前执行的一段程序,可以部分的改变我们所写的程序.之前已经用了一段预处理功能#include,当预处理器看到#include的时候就会用指定的头文件的内容代替#include************************************************************* c++程序还会用到一项预处理功能是头文件保护符(header guard),原创 2021-08-26 12:04:10 · 109 阅读 · 0 评论 -
C++查漏补缺部分_声明时易错_复合类型
#如果某个类型别名指代的是复合类型或常量,那么它用到的声明就会尝试意想不到的后果:例如:下面的声明语句用到了类型pstring,它实际上是类型char*的别名typedef char *pstring;const pstring cstr=0; //cstr是指向char的常量指针const pstring *ps; //ps是一个指针,它的对象是指向char的常量指针上述两条声明的语句的基本数据类型都是从const pstring 和过去一样,const是对给定类型的修饰。pstri原创 2021-08-23 13:53:00 · 212 阅读 · 0 评论