new、delete、malloc、free之间的关系 ?
参考答案:
new
、delete
、malloc
和 free
都是在 C++ 中用于动态内存分配和释放的函数,但它们在使用和功能上有所区别。
-
new 和 delete:
new
和delete
是 C++ 提供的操作符,用于动态分配和释放对象。new
不仅分配内存,还会调用对象的构造函数来初始化该对象。delete
不仅会释放内存,还会调用对象的析构函数来清理对象。new
和delete
是类型安全的,即编译器会检查类型匹配,以防止错误地释放不同类型的内存。
-
malloc 和 free:
malloc
和free
是 C 语言提供的函数,用于动态分配和释放内存。malloc
只负责分配内存,不会初始化内存。free
只负责释放内存,不会调用任何函数。malloc
和free
不是类型安全的,需要程序员自行处理类型转换和类型匹配。
在 C++ 中,建议使用 new
和 delete
,因为它们提供了更好的类型安全性和对象初始化/清理机制。但在某些情况下,例如与 C 代码交互或某些底层编程场景中,可能会使用 malloc
和 free
。
注意:在 C++ 中,使用 malloc
分配的内存必须使用 free
释放,同样,使用 new
分配的内存必须使用 delete
释放。混合使用这些函数可能会导致未定义的行为。