C++面试必备:new、delete与malloc、free的区别及注意事项

5星 · 超过95%的资源 需积分: 9 148 下载量 20 浏览量 更新于2024-07-26 收藏 241KB DOC 举报
"C++面试宝典2013版,包含全面的C++面试题目,尤其关注new、delete、malloc、free的区别与使用,以及delete与delete[]的差异,同时探讨了C和C++的共通点和继承的优缺点。" 在C++编程中,内存管理是至关重要的部分,面试中经常涉及new、delete、malloc和free的关系和使用场景。`new`和`delete`是C++特有的运算符,用于动态内存分配和释放,它们不仅分配或释放内存,还会调用相应的构造函数和析构函数。`malloc`和`free`是C语言的标准库函数,仅负责基本的内存分配和释放,不涉及对象的生命周期管理。 1. `new`和`delete`: 当使用`new`分配内存时,如果对象是类类型,会调用对应的构造函数来初始化对象;使用`delete`释放内存时,会调用析构函数清理资源。而`malloc`和`free`不涉及对象的构造和析构,仅进行内存的分配与释放。 2. `delete`与`delete[]`: `delete`用于删除单个对象,只调用一次析构函数;`delete[]`用于删除数组,会依次调用每个元素的析构函数,最后释放整个内存块。错误地将`delete`用于数组会导致只有首元素析构,其余元素未处理,可能导致内存泄漏。例如,`delete[] mTest1`和`delete[] pInt1`是正确的,而`delete mTest2`和`delete pInt2`也是正确的,但`delete[] mTest2`和`delete[] pInt2`会导致错误。 3. C和C++的共同点与不同之处: - 共同点:语法基础相似,都支持结构体、指针、函数等概念,都是面向过程的编程语言。 - 不同点:C++是C的超集,增加了类和对象(面向对象编程)、模板、异常处理、命名空间、STL(标准模板库)等功能。C++还引入了更严格的类型检查和内存管理机制,如构造函数和析构函数。 4. 继承的优缺点: - 优点: - 代码重用:子类可以继承父类的属性和方法,减少重复代码。 - 多态性:通过虚函数实现运行时多态,提高代码灵活性。 - 开闭原则:对扩展开放,对修改关闭,可以在不修改原有代码的基础上增加新功能。 - 缺点: - 增加复杂性:过多的继承层次可能导致代码难以理解和维护。 - 依赖性增强:子类过分依赖父类,父类的改动可能影响到所有子类。 - 继承是静态绑定,可能导致性能损失。 - 抽象程度过高:过度使用继承可能导致设计过于抽象,不易实现具体功能。 类继承是C++面向对象特性的重要组成部分,允许创建新的类来扩展已有类的功能,同时保持软件的可扩展性和可维护性。在面试中,理解这些核心概念和使用规则是评估开发者C++技能的关键。