05--C++内存管理和底层函数用法速览 |operator new|operator delete|replacement new| (复习笔记)

函数关系速记

底层实现上:malloc = operator new

     free = operator delete(operator new为new底层)

定位new:replacement new = 构造函数

new = malloc + replacement new delete = 析构函数 + free

new & delete 操作符

new:new 类型 [对象个数] (初始化)

delete:delete [] 指针

void Test()
{
  // 动态申请一个int类型的空间
  int* ptr4 = new int;
  
  // 动态申请一个int类型的空间并初始化为10
  int* ptr5 = new int(10);
  
  // 动态申请3个int类型的空间
  int* ptr6 = new int[3];
  delete ptr4;
  delete ptr5;
  delete[] ptr6;
}

replacement new

注意:构造函数一般不能被直接调用(析构函数才可以)

new(指针)构造函数(参数)

new(p2)A(10); //将p2位置的A对象初始化为10

// 定位放置new/replacement new
int main()
{
     // p1现在指向的只不过是与A对象相同大小的一段空间,构造函数没有执行,不算独立对象
     A* p1 = (A*)malloc(sizeof(A));
     new(p1)A;  // 注意:如果A类的构造函数有参数时,此处需要传参
     p1->~A();
     free(p1);
     A* p2 = (A*)operator new(sizeof(A));
     new(p2)A(10);
    //将p2位置的A对象初始化为10
     p2->~A();
     operator delete(p2);
     return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值