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

需积分: 4 1 下载量 10 浏览量 更新于2024-07-29 收藏 747KB PDF 举报
"C/C++笔试面试宝典2010版" C/C++编程语言在面试和笔试中占据着重要地位,特别是在系统级编程、游戏开发等领域。本资源提供了关于C/C++内存管理、对象生命周期及与其他语言共性和差异的重要知识点。 1. new、delete、malloc、free关系 在C++中,`new` 和 `delete` 是一对用于动态内存分配和释放的运算符,它们负责处理对象的构造和析构。相反,`malloc` 和 `free` 是C语言中的标准库函数,仅负责分配和释放原始内存,不涉及对象的构造或析构。`new` 可以确保对类对象进行正确的构造,而 `malloc` 无法做到这一点。同样,`delete` 调用析构函数,而 `free` 不会。由于 `malloc/free` 的局限性,C++引入了 `new/delete` 来更好地管理对象的生命周期。 2. delete与delete[]的区别 `delete` 和 `delete[]` 主要用于释放通过 `new` 或 `new[]` 分配的内存。`delete` 仅释放单个对象,并调用该对象的析构函数。而 `delete[]` 适用于数组,它会依次调用数组中每个元素的析构函数,然后释放整个数组的内存。使用 `new[]` 分配的内存必须用 `delete[]` 来释放,反之亦然。如果混淆使用,可能导致内存泄漏或运行时错误,例如在例子中,尝试使用 `delete` 删除一个由 `new[]` 分配的自定义类型数组会导致错误。 3. C/C++与JAVA的共同点和不同之处 - 共同点:三者都是面向对象的语言,支持类、继承、封装和多态等概念。同时,它们都可以用于构建复杂的应用程序,有丰富的库支持,并且都具有静态类型检查。 - 不同点:C++ 提供了更底层的控制,如指针操作,而JAVA则通过垃圾回收机制自动管理内存,避免了内存泄漏的问题。C++ 支持模板,允许在编译时生成代码,而JAVA没有类似的功能。此外,JAVA是跨平台的,代码一次编写,到处运行,而C++ 需要为每个目标平台单独编译。C++ 强调性能,适合系统级编程,而JAVA 更适合企业级应用和分布式系统。 了解这些知识点对于准备C/C++面试至关重要,因为它们涵盖了语言的核心特性和常见陷阱。深入理解内存管理、对象生命周期以及与其它语言的比较,可以帮助开发者编写出更安全、高效的代码。在面试中,能够熟练地讨论这些话题将展示出对C/C++深入的理解和实践经验。