C++面试关键知识点:new、delete与malloc、free的区别

需积分: 3 1 下载量 195 浏览量 更新于2024-07-28 收藏 95KB DOCX 举报
"C++面试宝典" C++面试宝典是一本全面涵盖历年IT行业面试题目的经典参考资料,尤其关注C++相关的问题。书中详细讨论了C++编程语言中的核心概念,包括内存管理、对象生命周期以及面向对象特性等方面的知识。 1. new、delete、malloc、free关系 在C++中,`new`和`delete`是专门针对对象管理的运算符,它们不仅分配和释放内存,还会调用构造函数和析构函数。相反,`malloc`和`free`是C语言中的库函数,仅负责基本的内存分配和释放,不处理对象的构造与析构。当涉及到类对象时,使用`new`和`delete`更加合适,因为它们能够确保对象生命周期的正确管理。而`malloc`和`free`则适用于原始数据类型或不需要构造和析构的内存分配。 2. delete与delete[]的区别 `delete`和`delete[]`的主要区别在于处理数组对象的方式。`delete`只释放一个单独的对象,并调用该对象的析构函数。而`delete[]`用于释放数组,会依次调用每个数组元素的析构函数,然后释放整个内存块。这表示对于自定义类型,应使用`delete[]`与`new[]`配套使用,而对于原始类型,两者可以互换,因为原始类型没有析构函数。例如: ```cpp MemTest *mTest1 = new MemTest[10]; // 使用new[] MemTest *mTest2 = new MemTest; // 使用new int *pInt1 = new int[10]; // 使用new[] int *pInt2 = new int; // 使用new delete[] pInt1; // 正确,释放数组 delete[] pInt2; // 正确,释放单个对象 delete[] mTest1; // 正确,释放数组并调用析构 delete[] mTest2; // 错误,mTest2不是数组,会导致未定义行为 ``` 3. C和C++的共同点与不同之处 共同点:C++是在C语言的基础上发展起来的,两者都支持过程化编程,有类似的语法结构,如循环、条件语句等,且都允许直接访问硬件资源,提供低级别的内存操作。 不同之处:C++引入了类和对象,支持面向对象编程,包含模板、异常处理、命名空间等功能,提供了更高级别的抽象,强调代码重用和封装。C++还支持STL(标准模板库),提供了容器、算法和迭代器等工具。 4. 继承的优缺点 优点: - 代码重用:子类可以继承父类的属性和方法,减少代码重复。 - 多态性:通过虚函数实现接口的多态,一个基类指针可以调用子类重写的函数,提高程序的灵活性。 - 可扩展性:方便地增加新功能,而不影响已有的代码。 缺点: - 代码复杂性:过度使用继承可能导致类层次结构过于复杂,难以理解和维护。 - 紧耦合:子类与其父类紧密耦合,父类的修改可能影响到所有子类。 - 抽象层次:不恰当的继承层次可能导致抽象层次混淆,使得类的设计变得困难。 - 单一职责原则:继承可能导致类承担过多责任,违反设计原则。 这些知识点只是C++面试宝典中的冰山一角,实际书籍中会涵盖更多主题,如模板、异常处理、STL、设计模式等,对准备C++相关的面试具有很高的参考价值。