ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

阿里钉钉C++面经及参考答案(上)

阿里钉钉C++面经及参考答案(上) C++ 中为什么要有 new/delete?它们与 malloc/free 的联系和区别是什么?C++ 之所以引入 new 和 delete,核心原因在于 malloc 和 free 是 C 语言标准库提供的内存管理函数,仅负责原始堆内存的分配与释放,不具备面向对象编程所必需的对象生命周期管理能力。C++ 的核心特性之一是类与对象,对象不仅仅是一块连续内存,还包含构造与析构逻辑,malloc 只会分配一块未初始化的裸内存,不会自动调用类的构造函数来初始化成员变量、申请子资源;free 只会回收内存空间,不会调用析构函数释放对象持有的文件句柄、堆内存、网络连接等资源,极易造成资源泄漏。new 和 delete 将内存空间分配、对象构造、内存回收、对象析构四个动作整合在一起,适配 C++ 面向对象的设计范式,同时兼容基础内置类型的内存管理,是 C++ 原生的内存管理机制。malloc 和 free 由 stdlib.h 提供,属于库函数,new 和 delete 是 C++ 内置运算符,编译器直接识别处理,不是普通函数调用。二者存在底层联系,默认情况下全局 new 底层实现会调用 malloc 申请内存,全局 delete 底层会调用 free 回收内存,但这个关联不是强制绑定的,开发者可以重载全局 new/delete 或者类专属的 operator new/operator delete,替换底层内存分配逻辑,不再依赖 malloc/free。在核心差异层面,首先是处理对象生命周期的能力,new 分配内存后自动调用构造函数初始化对象,delete 释放内存前自动调用析构函数清理资源;malloc 仅分配未经初始化的原始内存块,free 直接回收内存,不会执行任何构造、析构逻辑。其
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进