c++ 面试题 (实时更新)

一、new 和 malloc区别

1、属性方面

new是关键字,需要编译器支持

malloc是库函数,包括其头文件即可

2、分配内存

new自动分配内存

malloc需要手动分配内存

3、返回类型

new返回对象类型的指针,是符合类型安全性的操作符

malloc返回一个void*,需要强制转换成需要的类型

4、分配异常

new默认抛出一个异常

malloc返回NULL

5、内存泄露

new可以检测出来是哪一行

malloc不能明确是文件的哪一行

 

二、static

1、存放区域

堆区:需要程序员手动申请手动释放

栈区:编译器自动分配内存自动释放

静态区:static修饰的变量存放区域,也存放全局变量,随着程序的终止而释放

2、局部静态变量

作用于当前函数,只在第一次调用时进行初始化,但不随着函数的结束而释放,但其他函数也不能调用此静态变量

便于程序的维护

3、全局静态变量

只作用于当前文件,

用extern修饰的全局变量,可以作用于其他文件

4、类中修饰成员变量

修饰的变量不会占用当前类的内存空间,即在静态区进行内存的分配

且也只会初始化一次

 

静态成员函数不能访问非静态(包括成员函数和数据成员),但是非静态可以访问静态。

因为静态对象是确定的所以可以访问,

但非静态对象可以通过类实例化很多,没办法确定,所以不可以访问

静态对象之间可以互相访问,都是确定的。

 

三、野指针

1、定义:

未被初始化的指针,由于未初始化,所以其指向的地址是随机的。

指针越界访问,也会导致成为野指针

指针指向的空间释放后未置空

2、避免野指针

定义指针时对指针进行初始化,可以置为NULL

在清空指针时也需要把指针置为NULL

避免指针越界

避免返回局部变量地址

使用指针前检查指针的有效性

 

四、指针和引用区别

1、指针:就是内存地址

2、引用:就是变量的别名,不开辟内存控件,与变量使用同一块内存空间

3、区别:

初始化:引用在定义时必须初始化,而指针不用,不过尽量初始化,避免野指针出现

引用在初始化一个实体后,就不能再引用其他实体了,指针可以指向其他内存地址

没有NULL引用,但有nullptr指针

引用自加是引用的对象加1,指针自加是向右偏移一个类型大小

 

posted @ 2023-03-23 10:32  罗罗罗狗蛋  阅读(177)  评论(0编辑  收藏  举报