栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++ 深入理解C++的new 和delete

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++ 深入理解C++的new 和delete

new和malloc的区别

(1)new delete ,称为运算符;delete和free称作C的库函数

(2)new 不仅可以做内存开辟,还可以做内存初始化操作;malloc仅开辟内存;

(3)malloc开辟内存失败,是通过返回值和nullptr做比较;而new 开启内存失败,是通过抛bad_alloc类型的异常来判断的

#include 
#include 
int main()
{
  int *p = (int *)malloc(sizeof(int));//分配内存
  if (nullptr == p) {   //判断返回值
    return -1;
  }

  *p = 2;//初始化
  free(p);//释放

  int * p1;
  try
  {
     p1 = new int(2);//分配内存并初始化
  }
  catch (const std::bad_alloc & e)//判断是否抛异常
  {
  	
  }

  delete p1;
  return 0;
}

delete 和free区别

free 直接传入地址

delete [] p 释放数组;delete p 释放单个元素

new 的不同使用方式
#include 
#include 
int main()
{
  //1 抛异常new
  int * p1;
  try
  {
     p1 = new int(2);//分配内存并初始化
  }
  catch (const std::bad_alloc & e)//判断是否抛异常
  {
  	
  }

 //2 不抛异常new
  int *p2 = new (std::nothrow)int();//不抛异常

  //3 开辟常量内存
  const int *p3 = new const int(40);//开辟一个常量

  //4 定位new
  int data = 0;
  int *p4 = new(&data) int(50);//在指定地址内存初始化,本身并不开辟内存,只负责初始化

  delete p1;
  delete p2;
  delete p3;
  delete p4;
  return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/456925.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号