zoukankan      html  css  js  c++  java
  • new与malloc区别

    1、new分配内存时会按照数据类型计算需要分配内存的大小,malloc分配内存时是按照指定的大小分配的;
    2、new不仅分配一段内存,而且会调用构造函数,malloc不会调用构造函数;之前看到过一个题说int* p = new int与int* p = new int()的区别,因为int属于C++内置对象,不会默认初始化,必须显示调用默认构造函数,但是对于自定义对象都会默认调用构造函数初始化。翻阅资料后,在C++11中两者没有区别了,自己测试的结构也都是为0;
    3、new返回的是指定对象的指针,而malloc返回的是void*,因此malloc需要将返回值进行类型转化;
    4、new是一个操作符,malloc是一个库函数;
    5、new分配的内存要调用用delete销毁,malloc要用free来销毁;delete销毁时会调用对象的析构函数,而free不会调用对象的析构函数;
    6、malloc分配的内存不够的时候,可以用realloc扩容。new没用这样的扩容操作;
    7、new如果分配失败了会抛出bad_malloc的异常,而malloc失败了会返回NULL。因此对于new,需要和try…catch语法配合使用,而malloc则应该判断指针的返回值。为了兼容很多c程序员的习惯,C++也可以采用new nothrow的方法禁止抛出异常而返回NULL;

    new和new[]的区别,new[]一次分配所有内存,多次调用构造函数,分别搭配使用delete和delete[],delete[]多次调用析构函数,销毁数组中的每个对象。而malloc则只能sizeof(int) * n。

  • 相关阅读:
    简单的生成编号的存储过程
    表实体上面添加特性获取到连接字符串
    Spring 静态注入讲解(MethodInvokingFactoryBean)
    嵌套的SQL另外一种写法
    微信小程序之列表下拉加载更多
    微信小程序之--->轮播图制作
    javascript变量作用域
    struts2升级报ActionContextCleanUp<<is deprecated。Please use the new filters
    java日期加减
    数字转大写
  • 原文地址:https://www.cnblogs.com/xidian2014/p/8552854.html
Copyright © 2011-2022 走看看