睿创
list的迭代器失效?
在it之后的迭代器失效
map和unordered_map的底层数据结构,复杂度
红黑树 logn 哈希链表 1
map的key需要注意什么?
能够排序 ()操作符重载或者lambda表达式
快排 选择排序 插入排序的复杂度?
nlogn n2 n2
new和malloc的区别?
在C++中,new和malloc都用于动态内存分配,但它们之间存在一些关键区别:
-
语言特性:
new是C++的一个操作符,是C++语言的一部分,提供了类型安全和自动内存管理。malloc是一个C语言函数,定义在C标准库中,通常包含在<cstdlib>头文件中,不提供类型安全。
-
类型安全:
new返回的指针类型与申请内存的对象类型一致,不需要类型转换。malloc返回的是void*类型的指针,需要显式转换为需要的指针类型。
-
构造函数和析构函数:
new在分配内存后会自动调用对象的构造函数来初始化对象。malloc不调用构造函数,如果分配的是对象,需要手动调用构造函数来初始化对象。
-
异常处理:
new在内存分配失败时会抛出std::bad_alloc异常(除非使用了new(std::nothrow))。malloc在内存分配失败时返回nullptr,不会抛出异常。
-
内存释放:
- 与
new配对使用的是delete(单个对象)或delete[](对象数组)。 - 与
malloc配对使用的是free。
- 与
-
重载:
new和delete操作符可以被重载,允许自定义内存分配和释放的行为。malloc和free不能被重载,它们定义在全局命名空间。
-
内存对齐:
new保证返回的内存地址满足C++对象的对齐要求。malloc保证返回的内存地址满足C语言的对齐要求,可能不如new严格。
-
调试和诊断:
new和delete可以与C++的异常处理和调试工具集成,提供更多的诊断信息。malloc和free主要用于C语言环境,不直接与C++的调试工具集成。
-
使用场景:
new和delete更适合C++对象的创建和销毁,特别是需要构造和析构的场景。malloc和free更适合于C风格的内存分配,或者在与C代码库交互时使用。
浙公网安备 33010602011771号