C++内存管理

malloc/free与new/delete的区别

在C中,用malloc函数开辟空间,用free函数释放空间,而在C++中,用new不仅可以开辟空间,还可以调用构造函数初始化,而delete则会先调的析构函数再释放空间,new和delete是操作符,而malloc和free是函数

New

malloc申请空间会返回值,若申请失败则返回NULL,realloc还会释放原有的空间,为了防止释放原因的空间,产生野指针,我们可以用下面代码预防

int* ptr = (int*)calloc(5,sizeof(int));
     int* tmp = (int*)realloc(ptr, sizeof(int)*10);//realloc会释放原来的空间
     if(tmp != NULL)//防止空间申请失败,又释放ptr
     {
         ptr = tmp;
     }

但new不同的是当申请空间失败后会产生警报,我们可以用try...catch来实例化类或者使用set_new_handle()

new可以在申请空间的时候初始化,而malloc不行

int* ar = new ar[10]{1,2,3,4,5,6,7,8,9,10};

定位new是在已经分配的内存空间调用构造函数初始化对象

class Test
{
};

//重载定位new,可以选位置初始化
void* operator new(size_t sz, int* ar, int pos)
{
    return ar[pos];
}


Test* t = new Test();
new(t)int(10);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值