睿创

list的迭代器失效?
在it之后的迭代器失效
map和unordered_map的底层数据结构,复杂度
红黑树 logn 哈希链表 1
map的key需要注意什么?
能够排序 ()操作符重载或者lambda表达式
快排 选择排序 插入排序的复杂度?
nlogn n2 n2
new和malloc的区别?
在C++中,newmalloc都用于动态内存分配,但它们之间存在一些关键区别:

  1. 语言特性

    • new是C++的一个操作符,是C++语言的一部分,提供了类型安全和自动内存管理。
    • malloc是一个C语言函数,定义在C标准库中,通常包含在<cstdlib>头文件中,不提供类型安全。
  2. 类型安全

    • new返回的指针类型与申请内存的对象类型一致,不需要类型转换。
    • malloc返回的是void*类型的指针,需要显式转换为需要的指针类型。
  3. 构造函数和析构函数

    • new在分配内存后会自动调用对象的构造函数来初始化对象。
    • malloc不调用构造函数,如果分配的是对象,需要手动调用构造函数来初始化对象。
  4. 异常处理

    • new在内存分配失败时会抛出std::bad_alloc异常(除非使用了new(std::nothrow))。
    • malloc在内存分配失败时返回nullptr,不会抛出异常。
  5. 内存释放

    • new配对使用的是delete(单个对象)或delete[](对象数组)。
    • malloc配对使用的是free
  6. 重载

    • newdelete操作符可以被重载,允许自定义内存分配和释放的行为。
    • mallocfree不能被重载,它们定义在全局命名空间。
  7. 内存对齐

    • new保证返回的内存地址满足C++对象的对齐要求。
    • malloc保证返回的内存地址满足C语言的对齐要求,可能不如new严格。
  8. 调试和诊断

    • newdelete可以与C++的异常处理和调试工具集成,提供更多的诊断信息。
    • mallocfree主要用于C语言环境,不直接与C++的调试工具集成。
  9. 使用场景

    • newdelete更适合C++对象的创建和销毁,特别是需要构造和析构的场景。
    • mallocfree更适合于C风格的内存分配,或者在与C代码库交互时使用。
posted @   ponder776  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示