c++中已经有了malloc与free,还需要new与delete么,为什么

如题所述

第1个回答  2017-09-17
malloc构造对象可以调用构造函数吗??所以重新包装一个new来,你确定你不是百度的机器人提的问题?

C语言中已经有了malloc和free,为什么还需要new和delete?
1,malloc与free是C++\/C语言的标准库函数,new\/delete是C++的运算符。它们都可用于申请动态内存和释放内存。2, 对于非内部数据类型的对象而言,光用maloc\/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc\/free是库函数而不是运算符,不在...

c++中有malloc\/free 为什么还要new\/delete
1. new\/delete是C++里才有的,而new\/delete与malloc\/free一个显著的区别在于,new是建造一个对象,并调用对象的构造函数来初始化对象,其实在所有的new操作过程中,总是分为两步的:第一步是申请内存,第二步则是调用构造函数初始化对象。同样,在调用delete的时候,需要先调用析构函数,然后在销毁堆...

c++中有malloc必须有free么,为什么?
malloc和free必须成对出现,因为malloc开辟的内存空间在堆区,系统在程序结束时不会自动释放,如果程序员自己不手动释放的话就会造成内存泄露(就是有个指针指向一块内存,结果函数一结束,指针被删除了,而那块内存空间还在),那块内存空间就再也找不到了。同样的道理,new开辟的空间也在堆区,你也必...

c++编程中,用new动态分配内存后,不使用delete,被分配的内存会永远丢失吗...
在C++中可以用new和malloc在堆上申请空间,并且必选相应地用delete和free进行释放空间,因为在C++编译器中,堆这部分存储空间是完全由程序员自己管理的,即由程序员自己分配和释放。如果在程序中用new和malloc申请了空间的话,但是在程序中没有手动用delete和free释放空间的话,在程序执行过程中以及程序执行...

在C++中,使用malloc申请的内存能否通过delete释放?使用new申请的内存...
不能,malloc \/free主要为了兼容C,new和delete 完全可以取代malloc \/free的。malloc \/free的操作对象都是必须明确大小的。而且不能用在动态类上。new 和delete会自动进行类型检查和大小,malloc\/free不能执行构造函数与析构函数,所以动态对象它是不行的。当然从理论上说使用malloc申请的内存是可以通过...

C++free释放问题
free函数是由C语言继承而来的,是和malloc配对的,而不能和new配对。free释放内存的和delete可以说是两套代码,它们的逻辑不同,不能混用。用new申请的就要用delete翻译,用malloc申请的就要用free释放。顺便说一下它们还有一个区别, free 只是告诉操作系统回收内存,而delete会先调用类的析构函数,然后...

C++ free()
delete是释放new开辟的内存。new和delete 开辟再堆中内存时候会调用构造函数和析构函数 malloc和free不会调用。free释放内存,并不是真正意义上的把那块内存清空了,他只是告诉操作系统这块内存可以被再次使用,如果操作系统以后用这块内存的话就会把上面的数据覆盖掉。malloc多大内存就要用free多大内存。

C\/C++如果定义了一个char型指针并分配100的内存,全部memset为0,只给部 ...
可以,但请注意使用free或是delete。如果使用malloc分配,使用free,如果使用new 分配请使用delete。注意new和delete的使用:char *buffer = new char[100]; \/\/ 分配100字节 delete[] buffer; \/\/ 释放buffer指定的内存 buffer = NULL; \/\/ 防止buffer成为野指针 同时你需要了解内存分配的机制。简单来说...

C++中new和delete比 malloc和free有哪些优点?
不同点: (1)操作对象有所不同。 malloc与free是C++\/C 语言的标准库函数,new\/delete 是C++的运算符。对于非内部数据类的对象而言,光用maloc\/free 无法满足动态对象的要求。对象在创建的同时要自动执行构造函数, 对象消亡之前要自动执行析构函数。由于malloc\/free 是库函数而不是运算符,不在编译...

c++中new和delete的用法
在C++编程中,使用new分配的数组可用delete释放。这里释放的是动态分配的数组空间,而不是静态分配的数组空间,详细步骤:1、例如,我们动态创建了一个一维int数组arr,现在需要将它释放。2、这时只需要使用delete[]数组名即可。3、注意,要释放数组所占的内存,[]不能少。否则,用delete则不能完全释放...

相似回答