21xrx.com
2024-11-22 10:01:32 Friday
登录
文章检索 我的文章 写文章
C++ 中 new 和 malloc 的区别
2023-06-27 16:07:18 深夜i     --     --
C++ new malloc 区别

在 C++ 中,new 和 malloc 都是动态内存分配的方法,但它们在实现和使用上有很大的区别。

首先,new 是 C++ 关键字,malloc 是 C 语言标准库函数,但 C++ 也支持使用 malloc。new 通过调用类的构造函数来初始化分配的内存,而 malloc 只是简单的分配指定大小的内存,不会自动调用构造函数。因此,使用 new 分配的内存是经过初始化的,而使用 malloc 分配的内存是未经初始化的。

其次,new 返回类型是对象类型的指针,而 malloc 返回 void 类型的指针。使用 new 分配内存时,编译器会根据类型在堆上分配相应大小的内存,并返回一个指向分配内存的指针,程序员可以使用这个指针来操作对象。使用 malloc 分配内存时,需要使用显式类型转换将 void 类型指针转换为需要的类型指针,才能操作分配的内存。

再次,new 和 delete 必须成对使用,malloc 和 free 也必须成对使用。但使用 new 和 delete 时,不仅会释放指针所指向的对象,还会调用类的析构函数进行清理处理。而使用 malloc 和 free 时,只会释放申请的内存,不会调用类的析构函数,需要程序员自己手动调用。

最后,new 可以重载,可以根据需要为每个类重新定义 new 和 delete 操作符。而 malloc 不支持重载,不会自动调用类的构造函数和析构函数。

综上所述,new 和 malloc 在实现和使用上都有很大的区别。如果是分配对象类型的内存,应该优先使用 new,以保证对象被正确地初始化和清理。如果使用 malloc,需要注意通过显式类型转换和手动调用析构函数等额外的操作,才能正确操作分配的内存。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复