C++面试实战问题之new和malloc

1.malloc、calloc、realloc、alloca的作用

  1. malloc:动态分配内存。
    1. 函数原型:void* malloc(size_t size)
    2. 作用:在堆上分配指定大小的内存块。返回指向分配内存起始位置的指针或者NULL(如果分配失败)。
    3. 注意事项:使用malloc分配的内存中的内容是未初始化的,需要手动进行初始化。
  2. calloc:动态分配并清零内存。
    1. 函数原型:void* calloc(size_t num, size_t size)
    2. 作用:在堆上分配指定数量和大小的内存块,并将每个字节都设置为0。返回指向分配内存起始位置的指针或者NULL(如果分配失败)。
    3. 注意事项:使用calloc分配的内存已经被初始化为0,无需额外操作。
  3. realloc:重新调整内存块大小。
    1. 函数原型:void* realloc(void* ptr, size_t size)
    2. 作用:重新调整之前分配的内存块的大小。可以扩大或缩小内存块的大小。返回指向扩展/缩小后内存起始位置的指针或者NULL(如果调整失败)。
    3. 注意事项:realloc可能会更改内存块的位置,因此应该谨慎处理指向旧内存块的指针。
  4. alloca:在栈上动态分配内存。
    1. 函数原型:void* alloca(size_t size)
    2. 作用:在栈上临时分配指定大小的内存块。随着函数的返回,内存块会自动释放。
    3. 注意事项:使用alloca分配的内存只在函数的生命周期内有效,不需要手动释放。然而,由于在栈上分配,应谨慎使用,以免栈溢出等问题。

2.new和delete的作用

new:动态分配内存并构造对象。

delete:释放动态分配的内存并销毁对象。

3.delete this合法么

合法,但是必须保证

  1. 必须保证 this 对象是通过 new(不是 new[]、不是 placement new、不是栈上、不是全局、不是其他对象成员)分配的
  2. 必须保证调用 delete this 的成员函数是最后一个调用 this 的成员函数
  3. 必须确保不会在delete this之后继续使用该对象的指针,否则会导致悬挂指针的问题。
  4. 不要在其他成员函数中使用delete this

4.new和malloc的区别

  1. 用法和语法:
    1. new是一个运算符
    2. malloc是一个函数
  2. 类型安全:
    1. new会进行类型检查,并在需要时调用构造函数初始化对象。
    2. malloc只是简单地分配指定大小的内存块,不进行类型检查和对象的构造。
  3. 内存分配大小:
    1. new根据类型信息自动计算所需内存的大小。
    2. malloc需要手动指定要分配的内存大小。
  4. 返回类型:
    1. new返回指向分配内存的指针,且与要分配的类型相匹配。
    2. malloc返回void*指针,需要手动进行类型转换。
  5. 构造函数和析构函数的调用:
    1. new在分配内存后,会调用相应类型的构造函数来初始化对象。
    2. malloc不会调用构造函数,需要手动初始化对象。
  6. 内存释放:
    1. new使用delete来释放动态分配的内存,同时会调用析构函数。
    2. malloc使用free来释放动态分配的内存,不会调用析构函数。
  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值