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

C++中关于new

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

C++中关于new

C++中关于new
  • 1.new的三种用法
    • 1)new运算符的使用
    • 2)new函数方式的使用
    • 3.定位new的使用
  • 2.new和malloc的区别

1.new的三种用法 1)new运算符的使用
int *ipa=new int(10);//不加括号放弃对其初始化;加括号但括号为空即不加10,用0初始化;也可加花括号初始化
//1.自动计算int类型的大小
//2.调动malloc函数从堆区申请空间,开辟4个字节空间一个整型空间
//3.申请空间成功后用括号中的10对int开辟的空间初始化成10
//4.初始化完成之后将地址返回给ipa

int *is=new int[10]{1,2,3,4,5,6};//开辟一组空间,大小为10个

int *ir=new int[]{1,2,3,4,5};

delete ipa;//free(ipa);
ipa=NULL;
delete[]is;
delete[]ir;
2)new函数方式的使用
int main()
{
    int n=10;
    int *ipa=(int *)::operator new(sizeof(int));
    //        (int *)malloc(sizeof(int));
    
    int *ipb=(int *)::operator new(sizeof(int)*n);
    //        (int *)malloc(sizeof(int)*n);

	::operator delete(ipa);
    ::operator delete[](ipb);
    //::operator delete(ipb);错误,因为是一组空间要加[],并且释放之后一定要变成空指针,消除失效指针
	ipa=nullptr;
	ipb=nullptr;
}
3.定位new的使用
int main()
{
    int n=10;
    //int *ipa=(int *)::operator new(sizeof(int));
    int *ipa=(int *)malloc(sizeof(int));
    
    int *ipb=(int *)::operator new(sizeof(int)*n);
    //        (int *)malloc(sizeof(int)*n);

    new(ipa)int (20);
    new(ipb)int[]{1,2,3,4,5,6,7,8,9}
	free(ipa);
    ::operator delete[](ipb);
    //::operator delete(ipb);错误,因为是一组空间要加[],并且释放之后一定要变成空指针,消除失效指针
	ipa=nullptr;
	ipb=nullptr;
}
2.new和malloc的区别

1)new/delete是C++中的运算符,malloc/free是函数

2)malloc申请内存空间时,手动计算所需要的大小,new只需要类型名,自动计算大小;

3)malloc申请的内存空间不会初始化,new申请的内存空间可以初始化;

4)malloc的返回值为void*,接收时必须强转,new不需要;

5)malloc申请内存空间失败时,返回的是NULL,使用时必须判空,new申请内存空间失败时抛出异常,所有要有捕获异常处理程序。

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

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

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