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

需积分: 0 36 下载量 169 浏览量 更新于2024-07-20 收藏 452KB PDF 举报
"《C++面试笔试宝典2015》是一份汇集了超过100个C++面试常见问题的文档,旨在帮助准备C++软件开发工程师面试的程序员复习和掌握C++笔试中可能遇到的难点和遗漏点。文档内容涵盖了C++中的动态内存管理、对象生命周期、继承等核心概念。" 1. new、delete、malloc、free关系 在C++中,new和delete是专门用于对象动态内存分配和释放的运算符,它们不仅分配或回收内存,还会调用构造函数和析构函数。malloc和free是C语言中的库函数,仅负责基本内存的分配和释放,不涉及对象的构造和析构。当处理包含非内部数据类型的对象时,new和delete更为合适,因为它们能够确保对象的生命周期得到正确管理。 2. delete与delete[]的区别 delete和delete[]在处理数组时的行为有所不同。delete只会调用一次析构函数,适合释放单个对象;而delete[]会为数组中的每个元素调用析构函数,然后释放整个内存块。在使用new分配的数组中,应当使用delete[]进行释放,以避免内存泄漏。例如,new[]分配的自定义类型数组必须用delete[]释放,否则会导致只调用一次析构函数,未释放所有元素。对于基本类型的数组,两者效果相同,因为基本类型没有析构函数。 3. C和C++的共同点与不同之处 C和C++都是编程语言,具有一定的兼容性,共同点包括语法结构、预处理器、指针操作等。但C++作为C的超集,引入了类、对象、模板、异常处理、命名空间等面向对象特性,提供了更强大的类型安全性和内存管理机制。此外,C++还支持STL(标准模板库),包含各种容器、迭代器、算法等,提高了代码的可重用性和效率。 4. 继承 继承是面向对象编程中的一个关键概念,允许一个类(子类或派生类)从另一个类(父类或基类)继承属性和行为。通过继承,子类可以复用父类的功能,并对其进行扩展或修改。C++支持单一继承(一个子类只能有一个直接父类)和多重继承(一个子类可以继承多个父类)。继承有助于代码的组织和模块化,减少了代码重复,同时增强了代码的灵活性和可扩展性。继承关系中的访问修饰符(public、private、protected)决定了成员在子类中的可见性和可访问性。