C++面试深度解析:new、delete与malloc、free的区别

4星 · 超过85%的资源 需积分: 3 112 下载量 148 浏览量 更新于2024-08-01 2 收藏 609KB DOC 举报
"C++面试宝典2009" 在C++编程中,面试和笔试经常涉及对核心概念的理解,特别是内存管理和面向对象特性。以下是一些关键知识点的详细说明: 1. new、delete、malloc、free的关系: - `new` 和 `delete` 是C++中的运算符,它们负责动态内存的分配和释放,并且能够处理对象的构造和析构过程。 - `malloc` 和 `free` 是C语言标准库中的函数,仅用于原始内存的分配和释放,不涉及对象的构造和析构。 - `new` 在分配内存时会调用构造函数,`delete` 在释放内存时会调用析构函数。而 `malloc` 和 `free` 不会执行这些操作,因此它们不适用于需要初始化的对象。 2. delete 和 delete[] 的区别: - 单独的 `delete` 操作符只适用于非数组对象,它会调用一次析构函数并释放内存。 - `delete[]` 用于数组对象,它会依次调用数组中每个元素的析构函数,然后再释放整个内存块。 - 示例中,`delete[] mTest1` 和 `delete[] pInt1` 正确地调用了析构函数,而 `delete[] mTest2` 和 `delete[] pInt2` 报错,因为它们试图用 `delete[]` 处理非数组对象,这是不正确的。 3. C、C++、JAVA的共同点和不同之处: - 共同点:都是面向对象的语言(C++和Java),支持函数、变量、结构体等基本概念,都能进行系统级编程。 - 不同点:C是过程式语言,不支持类和对象;C++是面向对象,引入了类和模板等概念;Java是纯面向对象,有垃圾回收机制,且平台无关性更强。 4. 继承的优缺点: - 优点: - 代码复用:子类可以继承父类的属性和方法,减少重复编写代码。 - 多态性:通过继承,子类可以实现不同的行为,提供更具体的功能。 - 扩展性:可以轻松地添加新的子类,扩展系统的功能。 - 缺点: - 内存开销:每个子类对象都会包含父类的所有数据成员,即使它们可能未被使用。 - 复杂性:过多的继承层次可能导致代码难以理解和维护。 - 抽象层次:不恰当的继承可能导致抽象层次混淆,使得设计变得复杂。 - 错误传播:如果父类有错误,所有子类都可能受到影响。 了解这些基本概念对于C++面试至关重要,它们涵盖了内存管理、对象生命周期和面向对象设计的核心要素。深入理解这些知识点可以帮助开发者编写出更高效、更健壮的代码。