C++高频考点(一)
1、野指针和悬挂指针
野指针是指没有初始化的指针;悬挂指针是指指向的内存已经被释放的指针。野指针和悬挂指针都是指向不安全不可控的内存,如果操作该指针会发生意想不到的结果。
如何避免?
- 定义指针要初始化
- 释放指针后赋值NULL
- 使用智能指针
2、NULL和nullptr区别
- NULL不是关键字,它是宏。
#define NULL 0
或
#define NULL (void*)0
- nullptr是nullptr_t的一个实例。
注意:NULL在C++中表示空指针时具有二义性问题
在C语言中用NULL表示空指针,使用(void *)0赋值会隐式类型转换为对应的指针类型。在C++中不能把(void *)0隐式转换成其它类型,所以NULL只能用0表示空指针,但在函数重载时会出现二义性问题。最终C++11引入nullptr来解决这个问题。
3、智能指针
- C++11把C++98中的auto_ptr废除,引入shared_ptr、unique_ptr、weak_ptr智能指针。底层采用引用计数。
- shared_ptr:shared_ptr指向的堆内存允许与其它shared_ptr使用。
- unique_ptr:unique_ptr指向的堆内存不允许与其它unique_ptr使用。
- weak_ptr:weak_ptr不能单独使用,只能和shared_ptr搭配使用。借助weak_ptr可以获取shared_ptr指向内存的状态信息,不影响引用计数,不能修改内存的值。
4、如何在main函数之前调用函数
- 全局变量的构造函数。
- 全局变量的赋值函数。
- 指定入口点,入口点中调用main。
- 如果是c语言,可以用__attribut__ ((constructor))指定函数在main前调用,attribut ((destructor))指定函数在main后调用。
5
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
嵌入式软件面试笔记 文章被收录于专栏
该笔记涵盖嵌入式软件工程师技术面试中的知识点,归纳总结为:C/C++、操作系统、计算机网络、数据结构与算法、linux常用命令等章节。