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

需积分: 9 1 下载量 140 浏览量 更新于2024-07-30 收藏 99KB DOCX 举报
"C++面试宝典" C++是一种强大的编程语言,尤其在系统级编程、游戏开发和高性能计算等领域有着广泛的应用。面试中,对C++的理解和掌握往往是评价一个程序员能力的重要标准。以下是根据标题和描述提取的一些关键知识点: 1. **new、delete、malloc、free的关系** - `new` 和 `delete` 是C++中的运算符,用于动态内存分配和释放,同时支持对象的构造和析构。 - `malloc` 和 `free` 是C语言的标准库函数,仅处理原始内存的分配与释放,不涉及对象的生命周期管理。 - 当创建对象时,`new` 会调用构造函数,`delete` 在释放内存前调用析构函数。而`malloc` 和 `free` 不会执行这些操作,因此不适合处理需要构造和析构的对象。 2. **delete与delete[]的区别** - 单个对象使用 `delete` 进行释放,会调用对象的析构函数一次。 - 数组使用 `delete[]` 释放,会先依次调用所有数组元素的析构函数,然后释放内存。 - 使用 `new[]` 分配的内存必须使用 `delete[]` 释放,单个对象使用 `new` 分配的内存则使用 `delete` 释放。 - 对于内置类型,如整型,`delete` 和 `delete[]` 表现一致,但对用户定义的类型,不正确使用会导致未调用析构函数或内存泄漏。 3. **C、C++、Java的共同点与不同之处** - 共同点:都是面向对象的语言,支持封装、继承和多态等特性。 - 不同点: - C++ 是C的超集,具有面向对象特性,而C是过程化的。 - Java 是完全的面向对象语言,且具有垃圾回收机制,无需手动管理内存。 - C++ 支持模板、RTTI(运行时类型信息)和异常处理,而C不支持。 - Java 更强调跨平台兼容性,C++ 通常更关注性能。 4. **继承的优缺点** - 优点: - 代码复用:通过继承父类的属性和方法,减少重复代码。 - 多态性:子类可以替换父类,实现灵活的接口。 - 抽象层次:继承有助于构建层次分明的类结构。 - 缺点: - 类爆炸:过度使用继承可能导致类的数量快速增加,难以维护。 - 继承关系过于紧密:子类过于依赖父类,修改父类可能影响到子类。 - 死锁:钻石问题(multiple inheritance)可能导致继承关系复杂,解决起来困难。 - 代码复杂性:过多的继承层次可能导致代码理解难度增大。 在面试中,除了以上知识,还应准备其他C++核心概念,如模板、STL、异常处理、设计模式、内存管理等。理解和掌握C++的这些关键点将极大地提升面试者的竞争力。