9.野指针和悬空指针

  1. 野指针:指向不确定地址的指针,包括:
    1. 未初始化的指针。
    2. 指向已释放内存的指针(释放后未置空)。
    3. 指向生命周期已结束的对象(如指向栈变量的返回指针)。
  • 悬空指针:在释放内存后,没有置空,继续使用该指针变量。悬空指针本质上也是野指针的一种(子集关系)。
    虚继承解决什么问题?

  • 解决菱形继承问题,在多继承结构中,继承路径重复导致基类成员冗余。

  • 如有一个基类Base类,A类和B类都继承Base类,C类继承A类和B类,此时可能出现两份Base的成员。

    cpp 复制代码
    class Base {};
    class A : virtual public Base {};
    class B : virtual public Base {};
    class C : public A, public B {};
    //虚继承保证最终派生类中只存在一份 Base 子对象

extern关键字作用?

  • 用于声明变量或函数具有外部链接。即该变量或函数是在其他编译单元中定义的,在此处只是引用它。

  • extern "C",保证了在C++环境下兼容C已有的代码,使C编译器的代码可以被C++代码链接和使用,防止C++编译器对函数名进行修改,从而避免链接时找不到符号的问题。
    C++编译流程?

  • 预处理:处理宏定义、条件编译指令、头文件包含等。

  • 编译:将预处理后的代码转换为汇编代码。

  • 汇编:将汇编代码转换为机器代码。

  • 链接:将多个目标文件和库文件链接生成可执行文件。
    编译器在底层如何实现重载?

  • 通过名称修改,实现函数重载,每个函数在编译时,编译器都会跟其名称和参数类生成一个唯一的符号,以区别重载的不同函数。

cpp 复制代码
void foo(int){}//可能变成 _Z3fooi
void foo(double)//可能变成 _Z3food

C++函数调用的压栈过程?

  • 参数压栈:将函数的参数从右到左依次压入栈中。

  • 返回值压栈:将返回值的地址压入栈中。

  • 跳转到函数体内部:执行函数体部分。

  • 返回值处理:将返回值存储到寄存器或栈中。

  • 栈清理和返回:清理栈内存,返回调用函数的位置。
    什么是回调函数?

  • 回调函数是一种委托机制,就是将函数指针作为参数传递给另一个函数,在该函数内调用指针指向的函数。

使用场景

  • 事件驱动编程:处理按钮点击、鼠标移动等事件。

  • 定时器:定时器到时间后调用回调函数处理某些操作。

  • 异步编程:在网络编程中,回调函数用于处理异步IO操作。例如从服务器收到一些数据后通过回调函数处理这些数据。

  • 排序和搜索:在排序算法如sort中,通过回调函数比较元素。用户可以自定义比较函数,从而订制排序规则。
    如何正确使用内联函数?

  • 在函数体内容较少函数较为简单调用频率高需要调试及类型检查的场景,具体是否内联由编译器决定。内联的作用就是,编译器在内联处直接展开函数内容。

相关推荐
研究点啥好呢4 小时前
Github热门项目推荐 | 创建你的像素风格!
c++·python·node.js·github·开源软件
_dindong4 小时前
cf1091div2 C.Grid Covering(数论)
c++·算法
沫璃染墨4 小时前
C++ string 从入门到精通:构造、迭代器、容量接口全解析
c语言·开发语言·c++
6Hzlia4 小时前
【Hot 100 刷题计划】 LeetCode 17. 电话号码的字母组合 | C++ 回溯算法经典模板
c++·算法·leetcode
计算机安禾5 小时前
【数据结构与算法】第36篇:排序大总结:稳定性、时间复杂度与适用场景
c语言·数据结构·c++·算法·链表·线性回归·visual studio
unicrom_深圳市由你创科技5 小时前
做虚拟示波器这种实时波形显示的上位机,用什么语言?
c++·python·c#
无限进步_5 小时前
【C++】电话号码的字母组合:从有限处理到通用解法
开发语言·c++·ide·windows·git·github·visual studio
C++ 老炮儿的技术栈6 小时前
GCC编译时无法向/tmp 目录写入临时汇编文件,因为设备空间不足,解决
linux·运维·开发语言·汇编·c++·git·qt
橘颂TA6 小时前
【笔试】算法的暴力美学——牛客 NC213140 :除2!
c++·算法·结构与算法
wsoz7 小时前
Leetcode普通数组-day5、6
c++·算法·leetcode·数组