C++中,new/delete和malloc/free的区别

news/2024/7/3 13:12:06 标签: C++, new, delete, malloc, free

转自:C++中,new/deletemalloc/free的区别

1、new/delete是C++的操作符,而malloc/free是C中的函数。

2、new做两件事,一是分配内存,二是调用类的构造函数;同样,delete会调用类的析构函数和释放内存。而mallocfree只是分配和释放内存。

3、new建立的是一个对象,而malloc分配的是一块内存;new建立的对象可以用成员函数访问,不要直接访问它的地址空间;malloc分配的是一块内存区域,用指针访问,可以在里面移动指针;new出来的指针是带有类型信息的,而malloc返回的是void指针。

4、new/delete是保留字,不需要头文件支持;malloc/free需要头文件库函数支持。

class Obj
{
public:
    Obj() { cout << "Initialization" << endl; }
    ~Obj() { cout << "Destroy" << endl; }
    void Initialize() { cout << "Initialization" << endl; }
    void Destroy() { cout << "Destroy" << endl; }
};

void UseMallocFree()
{
    Obj *a = (Obj*)malloc(sizeof(obj));
    a->Intialize();
    // ...
    a->Destroy();
    free(a);
}

void UseNewDelete()
{
    Obj *a = new Obj;
    //...
    delete a;
}

类Obj的函数Initialize模拟了构造函数的功能,函数Destroy模拟了析构函数的功能。函数UseMallocFree中,由于malloc/free不能执行构造函数与析构函数,必须调用成员函数Initialize和Destroy来完成初始化与清除工作。函数UseNewDelete则简单得多。

这只是个例子,不会有人用malloc/free来创建类对象。另外,newdelete配套使用,new[]和delete[]配套使用。


http://www.niftyadmin.cn/n/1107521.html

相关文章

IBM牵头Linux版迅驰驱动首获官方支持(转)

IBM牵头Linux版迅驰驱动首获官方支持(转)[more]  作者&#xff1a;hippo 来源&#xff1a;太平洋电脑网众所周知&#xff0c;厂商的支持是Linux的当务之急&#xff0c;因为单凭一个Linux程序员为用户开发驱动程序的能力是相当有限的。以此为基础&#xff0c;使硬件能够完美的…

初学python之路-day12

本篇补上字符串的比较&#xff1a;按照从左往右比较每一个字符&#xff0c;通过字符对应的ascii进行比较 一、函数默认值的细节 # 如果函数的默认参数的默认值为变量&#xff0c;在所属函数定义阶段一执行就被确定为当时变量存放的值 a 100 def fn(numa):print(num) # 100 a …

从源码生成 Zephyr 文档

从源码生成 Zephyr 文档 生成的过程大约需要10分钟。pdf 格式的文档生成失败&#xff0c;html 格式的文档生成成功。 https://blog.csdn.net/zoomdy/article/details/90022599 mingdu.zheng at gmail dot com 安装文档生成工具 sudo apt install doxygen latexmk librsvg2-…

python定界符有哪些_在python中替换定界符和定界符位置之前,请...

您只需在学期中走一遍即可收集途中的所有必要信息&#xff1a; from string import ascii_letters,digits term CG-14/0,2-L-0_2 # defined set of allowed characters a-zA-Z0-9 # set lookup is O(1) - fast ok set(digits ascii_letters) specials {} clean [] for i,c …

MarkdownPad

MarkdownPad Markdown编辑器&#xff0c;只能在windows下使用 下载地址 &#xff1a;http://markdownpad.com/破解&#xff1a;邮箱&#xff1a;Soar360live.com授权证书GBPduHjWfJU1mZqcPM3BikjYKF6xKhlKIys3i1MU2eJHqWGImDHzWdD6xhMNLGVpbP2M5SN6bnxn2kSE8qHqNY5QaaRxmO3YSMH…

LINUX认证推出 掀新一轮技术认证狂潮(转)

LINUX认证推出 掀新一轮技术认证狂潮(转)[more]作者&#xff1a;千龙科技 来自&#xff1a;千龙科技在人才需求日益饱和的今天&#xff0c;如何证明自己的位置&#xff0c;如何谋求长期发展已成了现代人亟待解决的难题。于是&#xff0c;“认证”应运而生。国家针对各行业的特…

DAL 层引用 System.Net.Http ,引发的一阵心慌

快下班的时候 代码data 数据层编译失败&#xff0c;引起整个解决方案全部失败&#xff1b;其他同事虽然vs 版本不同&#xff0c;但是都能编译通过&#xff1b;考虑到今天更改过vs 的设置&#xff0c;把今天更改的设置全部都恢复&#xff0c;结果还是不行。最后直接恢复了原始设…

嵌入式软件编程中的异步、同步非阻塞、同步阻塞的对比

嵌入式软件编程中的异步、同步非阻塞、同步阻塞的对比 https://blog.csdn.net/zoomdy/article/details/90056185 mingdu.zheng at gmail dot com 异步 异步的执行效率是最高的&#xff0c;中断就是异步的&#xff0c;中断驱动比轮询驱动的效率高&#xff0c;这毋庸置疑。然而…