C++中关于new

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申请内存空间失败时抛出异常,所有要有捕获异常处理程序。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值