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常用命令等章节。

全部评论
已订阅,期待更新
点赞 回复 分享
发布于 2023-02-06 16:16 广东

相关推荐

11-09 12:17
清华大学 C++
out11Man:小丑罢了,不用理会
点赞 评论 收藏
分享
评论
10
35
分享
牛客网
牛客企业服务