C++概念知识整理
💡 面向就业的C++概念知识整理
C++概念知识
内存存储机制
根据数据类型的不同,C++会将数据会存储在内存的不同位置。请分别介绍内存位置及其对应数据类型。
答案
- 堆
- 存放程序所申请的内存,如malloc和new申请的内存
- 生命周期取决于程序员的申请和释放,free和delete
- 栈
- 存放函数参数,函数中的局部变量和临时变量。
- 生命周期从函数调用开始到函数调用结束。因此都是用栈来存储,后进先出,用完就丢。
- 爆栈的说法,其实也就是函数调用的次数太深。
- 全局/静态存储区
- 用来存放全局变量、静态变量和常量
- 生命周期从程序开始到程序结束
- 常量字符串存储区
- 常量字符串和其他文字常量
- 属于只读类型
- 代码区
- 程序运行的机器码
- 属于只读类型
malloc和new的区别
答案
- 来源与用途:
malloc
: 来自C语言的标准库。用于分配指定大小的连续内存块。new
: 是C++中的运算符。除了分配内存外,还会调用对象的构造函数。
- 返回类型:
malloc
: 返回void*
,这意味着返回的指针需要强制转换为适当的类型。new
: 返回分配的数据类型的正确指针,不需要任何类型转换。
- 错误处理
malloc
: 如果分配失败,返回NULL
。new
: 如果分配失败,会抛出std::bad_alloc
异常(除非使用new(std::nothrow)
,这种情况下如果分配失败会返回NULL
)。
- 初始化
malloc
: 仅仅分配内存,不初始化。也有对应的calloc
函数,可以初始化分配的内存为零。new
: 对于非内建类型,会调用相应的构造函数进行初始化。
- 大小参数
malloc
: 需要提供要分配的字节大小,例如malloc(5 * sizeof(int))
。new
: 根据数据类型自动确定大小,例如new int[5]
。
- 配对的释放操作:
malloc
: 使用free
来释放内存。new
: 使用delete
或delete[]
来释放内存。
- 灵活性与重载
malloc
: 不能被重载。new
: 在C++中可以被重载,为用户提供更多的灵活性。
构造函数和析构函数
智能指针
类的特殊成员函数
C++11如何保证代码只运行了一次
答案
都是使用预处理指令,不过有两种方法:
1.依赖于不冲突的宏名称
1 | // 假设这是个test.h的文件,即头文件 |
2.依赖于编译器:
1 | // 在头文件中使用 |
四种C++11引入的cast方式
答案
- const_cast:设置或者移除对象的const
- reinterpret_cast:可以做任意转换,不进行检查
- static_cast:类似原有的括号转换,可以upcast或downcast,不进行检查
- dynamic_cast:可以upcast或downcast,会进行检查,对性能有损耗
struct和class的区别
答案
new的操作符重载
std::memset
继承与多态
类中的this
静态变量和常量
inline和extern
c++初始化顺序
c++新特性
虚函数和纯虚函数
宏
cmake
GDB