C++面经day2

165 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

问题一:new和delete是如何实现的,两者有什么不同?

(1)new一个对象时首先会调用malloc分配内存空间,然后调用对象的构造函数。delete会调用对象的析构函数,然后调用free回收内存。

(2)new与malloc都会分配内存空间,new会调用对象的构造函数进行初始化,malloc需要手动设定分配空间大小。

问题二:有了malloc和free,为什么还用new和delete?

(1)malloc和delete、free与new都是用于内存的回收和申请。对于非基本数据类型的对象使用时可以用malloc和free;由于对象创建时需要执行构造函数,对象销毁时需要调用析构函数,所以他们的应用场景不同。一般来说c使用malloc和free,而c++使用new和delete。

(2)malloc和free时库函数,而new和delete是关键字。

问题三:delete和delete[]有什么区别?

(1)new申请的对象,使用delete释放;new[]分配的内存使用delete[]释放。

(2)detele调用一次析构函数,delete[]会调用所有对象的析构函数。 #include using namespace std; int main() {

// 表示动态分配一个int ,初始化为 7
int *p = new int(7);
//表示动态分配一个数组,数组大小为7
int *q = new int[7];
cout << *p << endl;
for (int i = 0; i < 7; i++)
{
	q[i] = i+4;
}
for (int i = 0; i < 7; i++)
{
	cout << q[i];
}
cout << endl;

}

捕获1.PNG

问题四:C++与Java都是面向对象的语言,两者有什么不同。

(1)C++和Java都是面向对象的语言,C++不具备良好的跨平台特性,可以编译成在特定平台运行的可执行文件;Java具有良好的跨平台特性,编译后可以在Java虚拟机中运行。

(2)Java内存管理由Java虚拟机完成,使用标记回收算法;C++内存管理由程序员手动管理。

(3)C++有指针;Java没有

(4)C++与Java都有构造函数,Java没有析构函数,C++有。

问题五:struct和class的区别?

(1)struct定义时,成员默认均为public类型,而class成员默认为private。

(2)struct继承时默认public,而class默认private。

(3)class可以用做模板,struct不可以。