"C++面试宝典是一本深入解析C++知识的面试指南,共包含136个经典问题,旨在帮助读者理解C++的核心概念并准备面试。书中的内容涵盖了C++内存管理的关键点,如new、delete、malloc、free的关系以及delete与delete[]的区别。此外,还涉及到了C和C++的异同以及继承的优缺点等核心话题。"
1. new、delete、malloc、free关系:
在C++中,new和delete是专门用于对象生命周期管理的运算符,它们不仅分配和释放内存,还会调用构造函数和析构函数。new在分配内存后会调用构造函数初始化对象,而delete在释放内存前会调用析构函数。相反,malloc和free是C标准库中的函数,仅负责基本的内存分配和释放,不处理对象的构造与析构。因此,对于包含复杂数据结构的对象,应使用new和delete以确保正确地初始化和清理。
2. delete与delete[]区别:
delete用于释放由new创建的单个对象的内存,而delete[]则用于释放new[]创建的数组。delete只调用一次析构函数,适用于非数组对象。delete[]会遍历数组,依次调用每个元素的析构函数,然后释放整个数组的内存。在使用new分配的内存必须使用对应的delete或delete[]进行释放。误用可能导致未调用析构函数或者内存泄露。
3. C和C++的共同点与不同之处:
共同点包括:都是编程语言,都支持结构化编程,都有预处理、变量声明、函数定义等功能,且两者都兼容C语言的语法。不同之处在于,C++是C的超集,它引入了类和对象的概念,支持面向对象编程,提供了模板、异常处理、命名空间等高级特性,并强化了内存管理。C++强调类型安全和资源管理,而C则更加关注底层的性能和灵活性。
4. 继承的优缺点:
优点:
- 代码重用:通过继承,子类可以共享父类的属性和方法,减少了代码重复,提高了开发效率。
- 多态性:继承支持多态,允许使用父类的引用或指针操作子类对象,增强了程序的灵活性。
- 可扩展性:继承使得类层次结构可以轻松扩展,新增功能而不影响原有类的结构。
缺点:
- 类层次复杂:过多的继承可能导致类层次结构过于复杂,增加理解和维护难度。
- 抽象程度下降:过度依赖继承可能使设计过于具体,降低了类的抽象性。
- 代码耦合:子类过于依赖父类,若父类修改可能会影响到子类,增加了耦合度。
- 鸭子类型问题:不当使用继承可能导致“is-a”关系混乱,违反了设计原则。
以上只是对C++面试宝典部分内容的概括,书中更深入的问题涉及模板、STL、异常处理、设计模式等多个方面,是C++开发者准备面试和提升技能的重要参考。