C++面试精华:136问解析+new/delete与内存管理

需积分: 9 3 下载量 198 浏览量 更新于2024-09-16 收藏 101KB DOCX 举报
在C++面试过程中,掌握以下几个关键知识点至关重要: 1. **内存管理运算符**: C++中的`new`和`delete`是一对运算符,它们分别用于动态内存的分配和释放。`new`不仅分配内存空间,还会调用对象的构造函数来初始化对象。相反,`delete`仅负责释放内存,不会自动执行析构函数,除非对象已被`new`正确初始化。`malloc`和`free`是C/C++标准库提供的内存管理函数,主要用于C风格的内存操作,不支持构造/析构函数的自动调用。为了确保内存管理的正确性,C++引入了`new`和`delete`作为内置机制。 2. **`delete`与`delete[]`的区别**: `delete`仅作用于单个对象,调用一次析构函数,而`delete[]`针对数组,会递归地调用每个数组元素的析构函数。例如,在代码`MemTest*mTest1 = new MemTest[10];`中,如果试图用`delete mTest1;`替换`delete[] mTest1;`,会引发错误,因为`delete`期望的是单个对象而非数组。因此,对于内建类型如`int`,两者功能相似,但对于自定义类型,必须区分对待。 3. **C与C++的异同**: C++是C的超集,继承了C的基本语法和特性。共同点包括基本的数据类型、指针操作、结构体和函数等。然而,C++引入了面向对象编程(OOP)的概念,如类、对象、封装、继承和多态,这些都是C中不具备的。此外,C++还提供了构造函数和析构函数,以及异常处理和模板等高级特性。 4. **类继承**: 类继承是C++中的重要概念,它允许子类继承父类的属性和行为。优点包括代码重用(避免重复编写相似功能)、层次结构组织(提高代码可读性和维护性)、以及实现抽象(父类接口可以被多个子类共享)。然而,继承也有其缺点:如果设计不当,可能会导致类间的耦合过深,增加复杂性;继承的“is-a”关系有时并不符合现实世界,可能导致“类爆炸”;且多重继承可能带来钻石问题(Diamond Problem)。 面试中,面试官可能会考察应聘者对这些核心概念的理解、应用场景以及如何避免常见的错误和陷阱。熟练掌握这些知识点将有助于你在C++面试中脱颖而出。