C++动态内存管理与面试知识点解析

版权申诉
0 下载量 149 浏览量 更新于2024-07-18 收藏 57KB DOCX 举报
"C++笔试面试常见知识点总结" 在C++编程中,理解和正确使用内存管理是至关重要的。以下是一些核心知识点的详细说明: 1. new、delete、malloc、free的关系: - `new` 和 `delete` 是C++中的运算符,用于动态内存分配和释放,它们会处理对象的构造和析构过程。 - `malloc` 和 `free` 是C++/C语言中的库函数,只负责分配和释放内存,不涉及对象的构造与析构。 - 当分配非内部数据类型(如类对象)时,使用 `new` 是必要的,因为它会调用构造函数初始化对象;而 `malloc` 无法做到这一点。 - `delete` 在释放内存前会调用析构函数,而 `free` 不会。 2. delete与delete[]的区别: - 单独的 `delete` 只会调用一次析构函数,适用于删除单个对象。 - `delete[]` 会依次调用数组中每个元素的析构函数,然后释放整个内存块,适用于删除动态分配的数组。 - 使用 `new[]` 分配的内存必须使用 `delete[]` 来释放,反之亦然,否则可能导致内存泄漏或未定义行为。 - 示例中,`delete[] mTest2;` 报错,因为 `mTest2` 指向单个对象而非数组,应当使用 `delete mTest2;`。 3. C++、C、Java的共同点与不同之处: - 共同点:都是面向对象的语言,支持指针操作,并且都允许多重继承。 - 不同点: - C++ 支持模板、运算符重载等特性,C则不支持。 - Java 不支持指针,而是使用引用,它的内存管理由垃圾回收机制自动处理,而C++和C需要程序员手动管理内存。 - C++ 支持多态性,包括静态多态和动态多态,而C不支持。 - Java 的跨平台能力更强,代码一次编写,到处运行,而C++和C通常需要针对不同的平台进行编译。 4. 继承相关知识点: - 继承是面向对象编程的基础概念,一个类(子类)可以继承另一个类(父类)的属性和方法。 - C++支持单继承、多重继承和虚拟继承,而Java只支持单继承。 - 子类可以通过覆盖(override)父类的方法来自定义行为。 - C++中的虚函数(virtual)用于实现多态性,确保在运行时调用到正确的子类方法。 5. 构造函数与析构函数: - 构造函数是在创建对象时自动调用的特殊方法,用于初始化对象的成员。 - 析构函数在对象生命周期结束时自动调用,用于清理资源和执行必要的清理工作。 - 构造函数和析构函数无返回类型,且构造函数名称与类名相同,析构函数前有 "~" 符号。 6. 面试题中可能还会涉及到: - 堆栈与堆的区别:堆栈内存由编译器自动管理,而堆内存需要程序员手动管理。 - 异常处理:C++中的try-catch语句用于捕获和处理运行时错误。 - 内存对齐:为了优化性能,编译器会按照特定规则对数据进行对齐,了解内存对齐有助于理解内存布局。 - STL(Standard Template Library):C++标准模板库,包括容器(如vector、list)、迭代器、算法等。 以上只是C++笔试面试中的一些常见知识点,实际准备时还需要深入学习模板、设计模式、STL的高级用法、并发编程等更复杂的话题。