new/delete 和 malloc/free 区别总结

一、new 是c++中的操作符,malloc是c 中的一个函数

malloc与free是C++/C语言的标准库函数(要用到malloc函数,必须包含malloc.h),new/delete是C++的运算符。

二、new不仅分配内存,而且会调用构造函数。同理,delete会调用析构函数

new可以认为是malloc加构造函数的执行;delete可以认为是free加析构函数的执行。

new出来的指针是直接带类型信息的,而malloc返回的都是void指针。

对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。

三、new能够自动分配空间大小,而malloc必须指定

这是因为new 内置了sizeof、类型转换和类型安全检查功能。对于非内部数据类型的对象而言,new 在创建动态对象的同时完成了初始化工作。

时间: 2024-09-18 04:42:40

new/delete 和 malloc/free 区别总结的相关文章

new/delete 与 malloc/free的区别

一.概述 在C++中,申请动态内存与释放动态内存用new/delete 与 malloc/free都可以,而且他们的存储方式相同,new/malloc申请的动态内存位于堆中,无法被操作系统自动回收,需要对应的delete也free释放空间. malloc/free是C/C++语言的标准库函数,在C语言中需要头文件#include<stdlib.h>的支持.而new/delete是C++的运算符.对于类对象而言,malloc/free无法满足动态对象的要求,对象要求在创建的同时自动执行构造函数,

new/delete 和 malloc/free有什么区别和联系

区别: 1. new/delete是C++的操作符,malloc/free是C/C++标准库函数. 2. new分为两步的:第一步是申请内存,第二步则是调用构造函数初始化对象.同样,在调用delete的时候,需要先调用析构函数,然后再回收堆内存.malloc只会根据参数分配内存,默认返回指向void*的指针,同样free释放malloc分配的内存. 3.malloc/free是new/delete的一个子集. 共同点: 1. 都必须配对使用,这里的配对使用,可不能理解为一个new/malloc就

new 、delete和malloc、free的解析及区别

在c语言中使用函数malloc和free来进行内存管理(分配与释放),在c++中则提供了运算符new和delete来做同样的工作,后者比前者性能更优越,使用更方便更灵活. 1.new用于内存分配的基本形式为: 指针变量名=new 类型 在程序运行过程中new是从堆的一块自由存储区中为程序分配一块与类型字节数相适应的内存空间,并将该块内存的首地址存于指针变量中. eg. int *p;   //声明一个整形指针变量p p=new int;   //动态分配一个存放int型数据的内存空间,并将首地址

new/delete 和malloc/free 的区别一般汇总

一.基本概念 malloc/free: 1.函数原型及说明: void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针.如果分配失败,则返回一个空指针(NULL). void free(void *FirstByte): 该函数是将之前用malloc分配的空间还给程序或者是操作系统,也就是释放了这块内存,让它重新得到自由. 2.内存操作: malloc函数的参数是接受需要分配的内存字节数,如果内存能够满足请求量,那么将会返回:指向被分

浅谈new、delete和malloc、free的用法与区别

(1)new和delete用法 如下几行代码: int *pi=new int; int *pi=new int(); int *pi=new int(1024); 第一行这个new表达式在自由存储区中分配创建了一个整形对象,并返回一个指向该对象的地址来初始化指针pi.第二行同一行,只是对指针pi指向的地址的值进行了初始化为0.第三行初始化为1024. 当动态创建的对象用完后必须释放内存,避免造成内存泄漏,可以用delete来完成,new和delete是成对使用的,如下命令释放pi指向的int型

new/delete与malloc/free的区别

参考: https://blog.csdn.net/u013485792/article/details/51329541 https://www.cnblogs.com/lyl-312/p/5528892.html http://www.cnblogs.com/QG-whz/p/5140930.html https://blog.csdn.net/gukesdo/article/details/7506155 本文在写作中参考了上述文章,特此感谢! [导语] 之前对new和delete,mal

[转]浅谈new/delete和malloc/free的用法与区别

目录 一.new和delete用法 二.malloc和free的用法 三.new和malloc的区别 正文 每个程序在执行时都会占用一块可用的内存空间,用于存放动态分配的对象,此内存空间称为自由存储区或堆. 回到顶部 一.new和delete用法 如下几行代码: int *pi=new int; int *pi=new int(); int *pi=new int(1024); 第一行这个new表达式在自由存储区中分配创建了一个整形对象,并返回一个指向该对象的地址来初始化指针pi.第二行同一行,

new/delete 和 malloc/free 的区别

1.malloc/free是C/C++语言的标准库函数,new/delete是C++的运算符.它们都可用于申请动态内存和释放内存.但是new能够自动分配空间大小,而malloc需要计算字节数. 2.对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求.对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数.由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free. 因此C++语言

关于new,delete,malloc,free的一些总结

首先,new,delete都是c++的关键字并不是函数,通过特定的语法组成表达式,new可以在编译的时候确定其返回值.可以直接使用string *p=new string("asdfgh");来直接赋值.这其中在调用new分配空间得时候的时候,系统其实直接调用了类或结构的构造函数来对对其进行赋值,这个过程就相当于是string p=string("asdfgh"); 或者string p("asdfgh");(其实上面的过程还是有一定的不同之处: