C++面试高频(一)
1.new和malloc的区别(使用和原理)⭐
new的定义:
new是C++的关键字,用于动态分配内存并创建对象。它可以根据类型自动计算所需内存空间,并调用对象的构造函数进行初始化。在使用new分配内存后,需要使用delete来释放这些内存空间,以防止内存泄漏。
malloc的定义:
malloc是C语言的库函数,用于动态分配一块指定大小的内存块,并返回其地址。需要注意的是,使用malloc分配内存后,需要使用free来释放这些内存空间,以防止内存泄漏。
new与malloc的区别:(简单理解)
语法:new是C++的关键字,而malloc是C语言的库函数。
类型安全:new操作符会根据类型自动计算所需内存大小,并进行类型匹配,返回的是对象类型指针;而malloc需要手动计算内存大小,并使用强制类型转换,返回的是void指针。
构造函数与析构函数的调用:new会自动调用对象的构造函数进行初始化,而malloc不会调用构造函数,得到的内存空间内容是未初始化的。
内存泄漏的检测:new可以通过异常机制检测内存分配失败,而malloc在分配失败时返回NULL,需要手动检查。
重载和自定义类型:new操作符可以重载,并能够与自定义类型的构造函数和析构函数配合使用;而malloc是库函数,不会调用自定义类型的构造和析构函数
new与malloc使用区别
#include <iostream>
#include <cstdlib>
int main() {
// 使用new进行动态内存分配和释放
int* newPtr = new int(10);
std::cout << "Value allocated with new: " << *newPtr << std::endl;
delete newPtr;
// 使用malloc进行内存分配和释放
int* mallocPtr = (int*)malloc(sizeof(int));
if (mallocPtr != nullptr) {
*mallocPtr = 20;
std::cout << "Value allocated with malloc: " << *mallocPtr << std::endl;
free(mallocPtr);
}
return 0;
}
2.struct和class的区别⭐
- 默认访问权限:struct中的成员默认为公共(public),而class中的成员默认为私有(private)。
- 默认继承方式:struct中的继承方式默认为公共(public),class中的继承方式默认为私有(private)。
- 使用习惯:struct适合用于简单的数据结构,class适合用于复杂的数据类型和实现面向对象编程。
- 成员变量和成员函数:struct中的成员变量和成员函数默认为公共,而class中的成员变量和成员函数默认为私有。
- 访问控制:struct中的成员在外部可直接访问,而class中的成员需要使用公共的成员函数来访问。
- 默认的构造函数和析构函数:class中会自动生成默认的构造函数和析构函数,而struct中不会。
3.char和int之间的转换
- 将char转换为int:可以直接将char类型的变量赋值给int类型的变量,将字符对应的ASCII码值赋给int变量。
char c = 'A';
int i = c; // 将字符'A'的ASCII码值赋给i
2.将int转换为char:可以使用强制类型转换 (static_cast<char>) 将int类型的变量转换为char类型的变量,该方法只会截取int变量的低位字节作为字符。