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

需积分: 3 0 下载量 32 浏览量 更新于2024-09-13 收藏 93KB DOCX 举报
"C++面试宝典" C++面试中,理解和掌握内存管理是至关重要的,尤其是new、delete、malloc和free之间的关系。new和delete是C++中的运算符,负责对象的构造、内存分配和销毁,而malloc和free是C语言中的函数,仅处理基本的内存操作。 1. new和delete与malloc和free的区别: - new不仅分配内存,还会调用构造函数以初始化对象。而delete在释放内存前会调用析构函数,确保对象的正确清理。 - malloc和free只是简单的内存分配和释放,不涉及对象生命周期的管理,因此不适合用于创建和销毁包含构造和析构行为的对象。 2. delete和delete[]的区别: - 单独的delete只调用一次析构函数,用于释放单个对象占用的内存。与new配合使用,适用于非数组对象。 - delete[]则对数组的所有元素分别调用析构函数,然后释放整个数组的内存。它应该与new[]搭配使用,适用于动态分配的数组。 举例来说,如果你动态创建了一个对象数组,如`MemTest *mTest1 = new MemTest[10];`,你应该使用`delete[] mTest1;`来释放内存,因为这将确保所有10个`MemTest`对象的析构函数都被调用。如果错误地使用了delete,如`delete mTest1;`,只有第一个对象的析构函数会被调用,其余的内存不会被正确释放,可能导致内存泄漏。 3. C和C++的共同点与不同之处: - 共同点:它们都基于C语言的基础语法,支持结构体、指针、预处理器等特性。 - 不同之处:C++是C的超集,增加了类和对象、模板、异常处理、STL(标准模板库)等面向对象和泛型编程特性,以及RAII(资源获取即初始化)等内存管理策略。 4. 继承的优缺点: - 优点:继承提供了代码重用,减少了代码冗余,使得设计更加模块化,提高了软件的扩展性和灵活性。通过多态,可以实现更高级别的抽象和通用性。 - 缺点:过深的继承层次可能导致复杂性增加,维护困难。另外,过度依赖继承可能导致设计过于僵硬,难以适应变化。此外,"钻石问题"(多重继承时的二义性问题)也是继承机制中需要注意的一个问题。 在面试中,了解这些核心概念并能够深入讨论它们的细节,将有助于展示你对C++的深刻理解。同时,也要熟悉其他关键主题,如模板、STL容器、设计模式、异常处理和内存管理的最佳实践。