【C++深度剖析教程32】new/malloc区别 delete/free区别

加qq1126137994 微信:liu1126137994 一起学习更多技术!!!

1、new与malloc的区别:

  1. new是关键字,它是C++语言的一部分,而malloc是由C库提供的函数
  2. new分配的内存的单位是具体的类型大小,而malloc以字节为单位分配内存
  3. new在分配内存空间时可以进行初始化,而malloc仅根据需要分配定量的内存空间
    看下面代码:
#include <iostream>
#include <string>
#include <cstdlib>using namespace std;class Test
{int* mp;
public:Test(){cout << "Test::Test()" << endl;mp = new int(100);cout << *mp << endl;}~Test(){delete mp;cout << "~Test::Test()" << endl;}
};int main()
{Test* pn = new Test;Test* pm = (Test*)malloc(sizeof(Test));delete pn;free(pm);return 0;
}

运行结果为:
Test::Test()
100
~Test::Test()

由运行结果得知:

  1. new能够触发构造函数的调用,malloc不行,它只能分配所需要的空间
  2. 对象的创建只能用new,而malloc不适合面向对象的开发
  3. new在所有的C++编译器中都可以使用,因为它是C++语言的关键字,是语言的一部分,而malloc是相关库函数,所以malloc在某些系统开发中是不能使用的

2、delete与free的区别
同样根据上面的函数以及运行结果可以知道,delete与free的区别:

  1. delete可以出发析构函数的调用,但是free仅归还之前申请的内存空间
  2. 对象的销毁只能用delete,free不适合面向对象的开发
  3. delete在所有C++编译器中都可以使用,而free在某些系统开发中不能使用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/423152.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

redis 思维导图

之前整理的redis 思维导图&#xff0c;分享一下&#xff0c;后续持续更新;

软件汉化教程

看到网上经常有人问汉化方面的东西&#xff0c;我今天也来灌水一篇&#xff0c;来个汉化扫盲教程。写的不好的地方欢迎大家指正&#xff01;OK&#xff0c;现在我们进入正题。我这里所说的汉化&#xff0c;是指汉化 Windows 下的 PE 文件&#xff0c;把其他语言界面的程序翻译为…

图的DFS深度遍历

最近复习了一下图的内容&#xff0c;记录一下&#xff0c;后续添加详解&#xff08;无向图的深度遍历&#xff09; package com.qey.learn;import java.util.ArrayList; import java.util.Arrays;/*** ClassName graph* Description* Author qianxl* Date 2021-03-06 17:18* V…

【C++深度剖析教程33】C++中的构造函数与析构函数是否可以为虚函数

加qq1126137994 微信&#xff1a;liu1126137994 一起学习更多技术&#xff01;&#xff01;&#xff01; 问题一&#xff1a;构造函数与析构函数可以成为虚函数么&#xff1f; 答案&#xff1a; 1、构造函数不可以成为虚函数 因为在构造函数执行结束后&#xff0c;虚函数表…

网站切图初学

先做一个简单的说明为什么选择Photoshop软件而没有选择Firework软件。Friework Dreamweaver Flash号称网页制作三剑客&#xff0c;Friework与Dreamwaver整合得更为紧密&#xff0c;在这里只所以选择photoshop只是因为我的偏好&#xff0c;况且我对 firework软件使用的次数很少&…

【C++深度剖析教程34】C++中的强制类型转换dynamic_cast

加qq1126137994 微信&#xff1a;liu1126137994 一起学习更多技术&#xff01;&#xff01;&#xff01; C中的继承中&#xff0c;如何使用强制类型转换&#xff1f; 知识点&#xff1a; dynamic_cast是与继承相关的类型转换关键字dynamic_cast要求相关的类中必须有虚函数dy…

main函数的参数的含义

转载自&#xff1a;点击链接 链接2 加qq1126137994 微信&#xff1a;liu1126137994 一起学习更多技术&#xff01;&#xff01;&#xff01; 最近学习服务器网络编程&#xff0c;遇到了一个问题&#xff0c;main函数的参数&#xff0c;特意整理资料记录之&#xff01;&#…

C#FTP操作

C# FTP操作类 收藏 using System;using System.Collections;using System.IO;using System.Net;using System.Net.Sockets;using System.Text;using System.Text.RegularExpressions; namespace Discuz.Common{ /// <summary> /// FTP类 /// </summary> …

【C++深度剖析教程35】函数模板的概念和意义

加qq1126137994 微信&#xff1a;liu1126137994 一起学习更多技术&#xff01;&#xff01;&#xff01; 1、问题引入&#xff1a; C中有几种变量交换的方法&#xff1f; 定义宏代码块和定义函数 #include <iostream> #include <string>using namespace std;#d…

生产者和消费者

注意&#xff01;&#xff01; notify和wait 使用后续补充 package com.qey.learn;/*** ClassName Water* Description* Author qianxl* Date 2021-03-01 23:09* Version 1.1**/ public class Water {// 服务员来提供产品的输入的输出private int product;public Water(int m…

前端学习(133):雪碧图实现原理

百度词条对雪碧图的解释是&#xff1a;CSS雪碧 即CSS Sprite&#xff0c;也有人叫它CSS精灵&#xff0c;是一种CSS图像合并技术&#xff0c;该方法是将小图标和背景图像合并到一张图片上&#xff0c;然后利用css的背景定位来显示需要显示的图片部分。 举个应用的实例&#xff…

如何在C++中动态分配二维数组

一般是三种方法&#xff1a;(1)用vector的vector&#xff0c;(2)先分配一个指针 数组&#xff0c;然后让里面每一个指针再指向一个数组&#xff0c;这个做法的好处是访问数组元素时比较直观&#xff0c;可以用a[x][y]这样的写法&#xff0c;缺点是它相当于C#中的一个锯齿 数组&…

循环打印ABA问题

注意&#xff01;&#xff01; notify 虚拟锁问题&#xff0c;后续补充 package com.qey.learn;/*** ClassName SwapPrint* Description* Author qianxl* Date 2021-03-02 14:46* Version 1.1**/ public class SwapPrint {public int flag 0;public synchronized void prin…

【C++深度剖析教程36】深入理解函数模板

加qq1126137994 微信&#xff1a;liu1126137994 一起学习更多技术&#xff01;&#xff01;&#xff01; 1、函数模板深入理解 编译器从函数模板通过具体类型产生不同的函数编译器会对函数模板进行两次编译 *对模板进行编译 *对参数替换后的函数进行编译 注意事项&#xf…

【C++深度剖析教程37】类模板的概念和意义

加qq1126137994 微信&#xff1a;liu1126137994 一起学习更多技术&#xff01;&#xff01;&#xff01; 1、类模板 一些类主要用于存储和组织数据元素类中数据的组织方式和数据元素的具体类型无关如 数组类&#xff0c;链表类&#xff0c;stack类&#xff0c;queue类等 C中…

链表中求倒数第几个元素并打印出来

//补充一下 链表的逆序操作 添加到listed 类中public Listed reverse() {Listed head this;Listed p head;// 单个节点的情况if (p.next null) {return p;}// 从第二节点的开始Listed q p;p p.next;q.next null;// 防止自循环// 临界条件while (p ! null) {Listed temp…

【C++深度剖析教程38】类模板深度剖析

加qq1126137994 微信&#xff1a;liu1126137994 一起学习更多技术&#xff01;&#xff01;&#xff01; 1、多参数类模板 类模板可以定义任意多个不同的类型参数 类模板可以被特化&#xff1a; 指定类模板的特定实现部分类型参数必须显示指定根据类型参数分开实现类模板…

c#中Dictionary、ArrayList、Hashtable和数组 Array 的区别(转)

C# 集合类 Array Arraylist List Hashtable Dictionary Stack Queue 1.数组是固定大小的&#xff0c;不能伸缩。虽然System.Array.Resize这个泛型方法可以重置数组大小&#xff0c; 但是该方法是重新创建新设置大小的数组&#xff0c;用的是旧数组的元素初始化。随后以前的数组…

dbeaver 连接hbase 数据库

1.安装dbeaver 参考: https://blog.csdn.net/volitationLong/article/details/80583977 安装dbeaver 2.配置hosts 文件 10.21.21.89 nn01.as 10.21.21.94 nn02.as 10.21.21.93 dn01.as 3.配置用户变量 4. 配置hbase 驱动 连接参数 点击“新建连接”按钮 4.1 选择:a…