笔试两问:malloc/free 与new/delete的区别 链表与数组的区别(与二者相关容器的回答)

在C++中,mallocfree 来自C语言,而 newdelete 是C++的运算符,它们都用于动态内存分配和释放,但有一些关键的区别:

malloc 和 free

  1. 语法
    • void* malloc(size_t size);:分配指定大小的内存块,返回一个指向它的指针。
    • void free(void* ptr);:释放之前分配的内存块。
  2. 类型malloc 返回一个 void* 类型的指针,你可能需要显式地转换它到需要的指针类型。
  3. 构造函数和析构函数malloc 和 free 不调用构造函数或析构函数。它们只分配和释放内存,不执行任何对象构造或析构。
  4. 错误处理malloc 在失败时返回 nullptr.

new 和 delete

  1. 语法
    • new T; 或 new T(args);:分配类型为 T 的对象,并调用其构造函数。
    • new[] T; 或 new[] T(args);:分配类型为 T 的数组,并调用每个元素的构造函数。
    • delete ptr;:释放单个对象,并调用其析构函数。
    • delete[] ptr;:释放对象数组,并调用每个元素的析构函数。
  2. 类型new 根据分配的类型自动确定返回的指针类型。
  3. 构造函数和析构函数new 和 delete 自动调用对象的构造函数和析构函数。
  4. 错误处理new 在失败时抛出一个 std::bad_alloc 异常,除非使用了 new (nothrow),这种情况下它会返回 nullptr

此外,可以看出malloc使用时需手动计算分配内存大小,而new可以自动计算.

链表与数组的区别常见回答包括有链表不支持随机访问,插入,删除,取地址等操作的时间复杂度不同,分配地址联系不连续的区别,以及是否可以自定义大小等,而从容器角度看,list容器的实现原理是双链表,而vector容器的实现原理是动态数组.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值