首页 > 其他分享 >有什么区别 new 和 malloc() ?

有什么区别 new 和 malloc() ?

时间:2023-02-17 22:56:57浏览次数:49  
标签:10 malloc 初始化 int 区别 new Circle

malloc() 是一个以数字(字节)作为参数的函数; 它返回一个 void* 指向单元化存储。 new 是一个运算符,它接受一个类型和(可选)该类型的一组初始值设定项 作为它的论点; 它返回一个指向其类型的(可选)初始化对象的指针。 当您要分配用户定义类型的对象时,差异最为明显 具有独特的初始化语义。 例子:   

class Circle : public Shape {
    public:
        Circle(Point c, int r);
        // 没有默认构造函数
        // ...
    };

    class X {
    public:
        X();    // 有默认构造函数
        // ...
    };

    void f(int n)
    {
        void* p1 = malloc(40);    // 分配 40 个(未初始化的)字节

        int* p2 = new int[10];    // 分配10个未初始化的整数
        int* p3 = new int(10);    // 分配1个初始化为10的int
        int* p4 = new int();    // 氛围1个初始化为0的int
        int* p4 = new int;    // 分配1个未初始化的int

        Circle* pc1 = new Circle(Point(0,0),10); // 分配一个构造的Circle
                                 // 带有指定的参数
        Circle* pc2 = new Circle;    // 错误,没有默认构造函数

        X* px1 = new X;        // 分配一个默认构造的X
        X* px2 = new X();    // 分配一个默认构造的X
        X* px2 = new X[10];    // 分配10个默认构造的X
        // ...
    }

请注意,当您使用“(值)”表示法指定初始化程序时, 您将使用该值进行初始化。 不幸的是,您不能为数组指定它。 通常, vector 是自由存储分配数组的更好替代方案 (例如,考虑异常安全)。

每当您使用 malloc() 时,您都必须考虑初始化并将返回指针转换为正确的类型。 您还必须考虑是否获得了适合您使用的字节数。 当您考虑初始化时,malloc() 和 new 之间没有性能差异。

malloc() 通过返回 0 报告内存耗尽。 new 通过抛出异常来报告分配和初始化错误。

创建的对象 new delete 销毁。 分配的内存区域 malloc() 释放 由free()

 

发现好的文章:细说new与malloc的10点区别 - melonstreet - 博客园 (cnblogs.com)   

 

标签:10,malloc,初始化,int,区别,new,Circle
From: https://www.cnblogs.com/wozhuyinghao/p/17131693.html

相关文章

  • new后可以用free吗
    虽然语言不会阻止您这样做,但您永远不应该在使用C++new运算符收到的块上使用Cfree函数。始终对从new运算符接收的块使用C++delete运算符,对从new[]运算符接收......
  • wget、yum、rpm、apt-get区别
    首先,要了解他们之间的区别,要了解Linux系统的分类,主要分为两大类:Redhat系列:Redhat、Centos、Fedora等Debian系列:Debian、Ubuntu等一、wget不是安装方式,它是Linux中下......
  • Vite 与 Webpack的区别
    1.什么是Vite?Vite是尤雨溪在开发vue3的时候开发的一个web开发构建工具。极速的服务启动:使用原生ESM文件,无需打包!轻量快速的热重载:无论应用程序大小如何,都......
  • powershell和cmd区别是什么
    前言powershell和cmd区别:1、CMD写的BAT脚本我们看作是面向过程的,而PowerShell则是面向对象的,是一种站在使用者的角度进行脚本的编写;2、CMD只能执行基本的任务,PowerShell......
  • 主键、唯一索引、聚集索引、非聚集索引,你真知道他们的区别么?
    【讲故事】近端时间一直在做一些数据库查询的工作,主要是根据表中的“日期”与“产品名”两个字段为条件在对表进行相关查询。但当表数据量达到3000万以上时,发现查询速度......
  • map数据类型,与object 类型的区别
    https://www.cnblogs.com/ht955/p/14170885.htmlhttps://www.cnblogs.com/Hijacku/p/16457600.htmlMAP数据类型是一个类似于对象的数据类型,大型项目中会经常使用。  ......
  • 高企和科技型中小企业有何区别
    对于企业来说,成功申报高新技术企业和科技型中小型企业都可以享受国家的补贴政策和税收上的优惠等好处,那么,你知道他们有什么区别吗?具体都有些什么好处呢?高新技术企业知识......
  • vue2和vue3的响应式区别
    vue响应式依赖的函数vue2vue2中依赖es5的Object.defineProperty属性,该方法可以在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回这个对象。监听的是对象......
  • node:internal/crypto/hash:71 this[kHandle] = new _Hash(algorithm, xofLen);
    D:\Node\node.exeD:\Node\node_modules\npm\bin\npm-cli.jsrunstart:dev--scripts-prepend-node-path=auto>[email protected]:dev>cross-envREACT_AP......
  • 作用域和链接之间的区别
    作用域和链接之间的区别问:“作用域”和“链接”之间的区别到底是什么?答:作用域是为编译器服务的,而链接则是为链接器服务的。编译器用标识符的作用域来确定在文件的给定位......