c++中的new和delete完成与malloc和free相似的功能,但是它们相比之下都有哪些优点,哪个会好用一点?常用的是哪一个?www.10tiko.com
mallocä¸freeæ¯C++/Cè¯è¨çæ ååºå½æ°ï¼new/deleteæ¯C++çè¿ç®ç¬¦ãå®ä»¬é½å¯ç¨äºç³è¯·å¨æå ååéæ¾å å
2.对äºéå é¨æ°æ®ç±»åç对象èè¨ï¼å ç¨maloc/freeæ æ³æ»¡è¶³å¨æ对象çè¦æ±ã对象å¨å建çåæ¶è¦èªå¨æ§è¡æé å½æ°ï¼å¯¹è±¡å¨æ¶äº¡ä¹åè¦èªå¨æ§è¡ææå½æ°ãç±malloc/freeæ¯åºå½æ°èä¸æ¯è¿ç®ç¬¦ï¼ä¸å¨ç¼è¯å¨æ§å¶æéä¹å ï¼ä¸è½å¤ææ§è¡æé å½æ°åææå½æ°çä»»å¡å¼ºå äºmalloc/freeã
3.å æ¤C++è¯è¨éè¦ä¸ä¸ªè½å®æå¨æå ååé ååå§åå·¥ä½çè¿ç®ç¬¦newï¼ä»¥ä¸ä¸ªè½å®ææ¸ çä¸éæ¾å åå·¥ä½çè¿ç®ç¬¦deleteã注ænew/deleteä¸æ¯åºå½æ°ã
4.C++ç¨åºç»å¸¸è¦è°ç¨Cå½æ°ï¼èCç¨åºåªè½ç¨malloc/free管çå¨æå
åã
5.newå¯ä»¥è®¤ä¸ºæ¯mallocå æé å½æ°çæ§è¡ãnewåºæ¥çæéæ¯ç´æ¥å¸¦ç±»åä¿¡æ¯çãèmallocè¿åçé½æ¯void*æéã
new deleteå¨å®ç°ä¸å ¶å®è°ç¨äºmalloc,freeå½æ°
6.new建ç«çå¯¹è±¡ä½ å¯ä»¥æå®å½æä¸ä¸ªæ®éç对象,ç¨æåå½æ°è®¿é®,ä¸è¦ç´æ¥è®¿é®å®çå°å空é´;mallocåé çæ¯ä¸åå ååºå,å°±ç¨æé访é®å¥½äº,èä¸è¿å¯ä»¥å¨éé¢ç§»å¨æé.
7.new 建ç«çæ¯ä¸ä¸ªå¯¹è±¡ï¼mallocåé çæ¯ä¸åå å.
***************************************
ç¸åç¹ï¼é½å¯ç¨äºç³è¯·å¨æå ååéæ¾å å
ä¸åç¹ï¼
(1)æä½å¯¹è±¡ææä¸åã
mallocä¸freeæ¯C++/C è¯è¨çæ ååºå½æ°ï¼new/delete æ¯C++çè¿ç®ç¬¦ã对äºéå
é¨æ°æ®ç±»ç对象èè¨ï¼å
ç¨maloc/free æ æ³æ»¡è¶³å¨æ对象çè¦æ±ã对象å¨å建çåæ¶è¦èªå¨æ§è¡æé å½æ°ï¼ 对象æ¶äº¡ä¹åè¦èªå¨æ§è¡ææå½æ°ãç±äºmalloc/free æ¯åºå½æ°èä¸æ¯è¿ç®ç¬¦ï¼ä¸å¨ç¼è¯å¨æ§å¶æéä¹å
ï¼ä¸è½å¤ææ§è¡æé å½æ°åææå½æ°çä»»å¡å¼ºå malloc/freeã
(2)å¨ç¨æ³ä¸ä¹ææä¸åã
å½æ°malloc çååå¦ä¸ï¼
void * malloc(size_t size);
ç¨malloc ç³è¯·ä¸åé¿åº¦ä¸ºlength çæ´æ°ç±»åçå
åï¼ç¨åºå¦ä¸ï¼
int *p = (int *) malloc(sizeof(int) * length);
æ们åºå½æ注æåéä¸å¨ä¸¤ä¸ªè¦ç´ ä¸ï¼âç±»å转æ¢âåâsizeofâã
malloc è¿åå¼çç±»åæ¯void *ï¼æ以å¨è°ç¨malloc æ¶è¦æ¾å¼å°è¿è¡ç±»å转æ¢ï¼å°void * 转æ¢ææéè¦çæéç±»åã
malloc å½æ°æ¬èº«å¹¶ä¸è¯å«è¦ç³è¯·çå
åæ¯ä»ä¹ç±»åï¼å®åªå
³å¿å
åçæ»åèæ°ã
å½æ°free çååå¦ä¸ï¼
void free( void * memblock );
为ä»ä¹free å½æ°ä¸è±¡malloc å½æ°é£æ ·å¤æå¢ï¼è¿æ¯å 为æép çç±»å以åå®ææçå
åç容éäºå
é½æ¯ç¥éçï¼è¯å¥free(p)è½æ£ç¡®å°éæ¾å
åãå¦æp æ¯NULL æéï¼é£ä¹free
对p æ 论æä½å¤å°æ¬¡é½ä¸ä¼åºé®é¢ãå¦æp ä¸æ¯NULL æéï¼é£ä¹free 对pè¿ç»æä½ä¸¤æ¬¡å°±ä¼å¯¼è´ç¨åºè¿è¡é误ã
new/delete ç使ç¨è¦ç¹
è¿ç®ç¬¦new 使ç¨èµ·æ¥è¦æ¯å½æ°malloc ç®åå¾å¤ï¼ä¾å¦ï¼
int *p1 = (int *)malloc(sizeof(int) * length);
int *p2 = new int[length];
è¿æ¯å 为new å
ç½®äºsizeofãç±»å转æ¢åç±»åå®å
¨æ£æ¥åè½ã对äºéå
é¨æ°æ®ç±»åç对象èè¨ï¼new å¨å建å¨æ对象çåæ¶å®æäºåå§åå·¥ä½ãå¦æ对象æå¤ä¸ªæé å½æ°ï¼é£ä¹new çè¯å¥ä¹å¯ä»¥æå¤ç§å½¢å¼ã
å¦æç¨new å建对象æ°ç»ï¼é£ä¹åªè½ä½¿ç¨å¯¹è±¡çæ åæ°æé å½æ°ãä¾å¦
Obj *objects = new Obj[100]; // å建100 个å¨æ对象
ä¸è½åæ
Obj *objects = new Obj[100](1);// å建100 个å¨æ对象çåæ¶èµåå¼1
å¨ç¨delete éæ¾å¯¹è±¡æ°ç»æ¶ï¼çæä¸è¦ä¸¢äºç¬¦å·â[]âãä¾å¦
delete []objects; // æ£ç¡®çç¨æ³
delete objects; // é误çç¨æ³
åè
ç¸å½äºdelete objects[0]ï¼æ¼æäºå¦å¤99 个对象ã
***************************************
1 newèªå¨è®¡ç®éè¦åé
ç空é´ï¼èmallocéè¦æ工计ç®åèæ°
2 newæ¯ç±»åå®å
¨çï¼èmallocä¸æ¯ï¼æ¯å¦ï¼
int* p = new float[2]; // ç¼è¯æ¶æåºé误
int* p = malloc(2*sizeof(float)); // ç¼è¯æ¶æ æ³æåºé误
new operator ç±ä¸¤æ¥ææï¼åå«æ¯ operator new å construct
3 operator new对åºäºmallocï¼ä½operator newå¯ä»¥éè½½ï¼å¯ä»¥èªå®ä¹å
ååé
çç¥ï¼çè³ä¸åå
ååé
ï¼çè³åé
å°éå
å设å¤ä¸ãèmallocæ è½ä¸ºå
4 newå°è°ç¨constructorï¼èmallocä¸è½ï¼deleteå°è°ç¨destructorï¼èfreeä¸è½ã
5 malloc/freeè¦åºæ件æ¯æï¼new/deleteåä¸è¦ã
C++中new和delete比 malloc和free有哪些优点?
malloc与free是C++\/C语言的标准库函数,new\/delete是C++的运算符。它们都可用于申请动态内存和释放内存 2.对于非内部数据类型的对象而言,光用maloc\/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由malloc\/free是库函数而不是运算符,不在编译器控...
C++中,new\/delete和malloc\/free的区别
1、new\/delete是C++的操作符,而malloc\/free是C中的函数。2、new做两件事,一是分配内存,二是调用类的构造函数;同样,delete会调用类的析构函数和释放内存。而malloc和free只是分配和释放内存。3、new建立的是一个对象,而malloc分配的是一块内存;new建立的对象可以用成员函数访问,不要直接访问它...
c++中有malloc\/free 为什么还要new\/delete
1. new\/delete是C++里才有的,而new\/delete与malloc\/free一个显著的区别在于,new是建造一个对象,并调用对象的构造函数来初始化对象,其实在所有的new操作过程中,总是分为两步的:第一步是申请内存,第二步则是调用构造函数初始化对象。同样,在调用delete的时候,需要先调用析构函数,然后在销毁堆...
在C语言中malloc,free,new,del,?
1,malloc与free是C++\/C语言的标准库函数,new\/delete是C++的运算符。它们都可用于申请动态内存和释放内存。2, 对于非内部数据类型的对象而言,光用maloc\/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc\/free是库函数而不是运算符,不在...
经典面试题之new和malloc的区别
C++允许重载new和delete操作符,特别地,new可以预先指定内存起始区域,用于对象初始化并返回地址,而malloc不允许重载。new操作符从自由存储区分配内存,而malloc从堆上动态分配内存。自由存储区是C++中new操作符的抽象概念,用于描述通过new操作符申请的内存区域。堆是操作系统管理的一块特殊内存区域,用于...
关于C++ new和malloc的区别,记住这张表格就行了!
new和malloc的主要区别在于属性、使用、内存位置、返回类型、分配失败情况和定义对象系统调度过程等方面。new是C++中的关键字,用于在运行时分配内存,分配成功时返回与对象类型匹配的指针,不需要进行类型转换。malloc是C语言中的库函数,用于在堆上分配内存,返回void*类型的指针,需要通过强制类型转换来使用...
new和malloc的区别
new和delete是C++中的用法,对于C++而言,new和delete可以提供比C语言更好的内存分配机制(当malloc无法分配内存,malloc会返回NULL,即0,表示分配失败,这样等同于将\\“糟糕的结果\\”踢给应用程序,而new一般总是可以分配内存,如果new无法分配内存,不会返回NULL,而是暂停程序去运行专门的处理程序,而...
使用new与malloc分配内存有什么区别?
1、new 是c++中的操作符,malloc是c 中的一个函数2、new 不止是分配内存,而且会调用类的构造函数,同理delete会调用类的析构函数,而malloc则只分配内存,不会进行初始化类成员的工作,同样free也不会调用析构函数3、内存泄漏对于malloc或者new都可以检查出来的,区别在于new可以指明是那个文件的那...
new与malloc的区别以及实现方法
1. malloc和free是库函数,而new和delete是C++操作符;2. new自动计算所需空间大小,例如“int *a = new”,而malloc需要指定大小,例如“int *a = malloc(sizeof(int))”;3. new在动态分配内存时可以初始化对象,调用其构造函数,delete在释放内存时调用对象的析构函数。而malloc只分配一段给定...
new和malloc区别
首先,malloc是C语言标准库中的一个函数,它用于分配一定数量的内存空间。在使用malloc时,需要指定需要分配的内存大小。malloc会根据可用内存的情况,分配相应大小的内存空间,并返回指向这块内存的指针。如果内存分配失败,malloc会返回NULL。相比之下,new是C++中用于内存分配的运算符。它与malloc不同,它会...