C++开发必备:全面解析STL的多种内存分配方法
在C++中,STL(标准模板库)提供了许多用于内存分配的工具和容器。以下是一些常用的STL内存分配方法: 1. `new`和`delete`:这是C++中最基本的内存分配和释放方法。`new`用于在堆上分配内存,`delete`用于释放堆上分配的内存。例如: ```cpp int* p = new int; // 在堆上分配一个int类型的内存 delete p; // 释放堆上分配的内存 ``` 2. `new[]`和`delete[]`:这是用于分配和释放数组的内存的方法。例如: ```cpp int* p = new int[10]; // 在堆上分配一个包含10个int的数组 delete[] p; // 释放堆上分配的数组 ``` 3. `std::malloc`和`std::free`:这是C++标准库提供的用于内存分配和释放的方法。它们的行为类似于C语言中的`malloc`和`free`。例如: ```cpp int* p = std::malloc(sizeof(int)); // 在堆上分配一个int类型的内存 std::free(p); // 释放堆上分配的内存 ``` 4. `std::vector`:这是STL中的一个容器,它自动管理内存。当你向`std::vector`中添加元素时,它会自动在需要时在堆上分配内存。当你从`std::vector`中删除元素时,它会自动释放不再需要的内存。例如: ```cpp std::vector<int> v; // 创建一个空的std::vector v.push_back(1); // 在std::vector中添加一个元素 v.pop_back(); // 从std::vector中删除一个元素 ``` 5. `std::unique_ptr`和`std::shared_ptr`:这是C++11引入的两种智能指针,它们可以自动管理内存。`std::unique_ptr`只拥有一个指向堆上分配的内存的指针,当`std::unique_ptr`被销毁时,它会自动释放内存。`std::shared_ptr`可以拥有多个指向同一块堆上分配的内存的指针,当最后一个`std::shared_ptr`被销毁时,它会自动释放内存。例如: ```cpp std::unique_ptr<int> p(new int); // 在堆上分配一个int类型的内存 // p被销毁时,它会自动释放内存 ``` ```cpp std::shared_ptr<int> p1(new int), p2(new int); // 在堆上分配两个int类型的内存 // p1和p2都拥有指向同一块内存的指针,当p1和p2都被销毁时,它们会自动释放内存 ``` ######[AI写代码神器 | 588点数解答 | 2023-11-09 00:50:32]
- Java 实现计算机硬件模拟:从 PCI 设备到主板、计算机的启动与关闭(字节豆包 | 716点数解答 | 2024-12-08 23:38:38)328
- Java 代码:模拟计算机主板启动与关闭 PCI 设备全流程(字节豆包 | 637点数解答 | 2024-12-09 08:31:54)296
- C++开发必知:STL中unordered_map与map的区别及应用场景(阿里通义 | 213点数解答 | 2023-11-09 00:39:09)227
- Java 实战:Vehicle 类与 User 类实现机动车速度功率控制( | 968点数解答 | 2024-03-12 11:26:25)544
- Golang开发:解析JSON数据时数值默认类型及示例解析(百度文心 | 393点数解答 | 2023-11-09 18:13:06)278
- SQL Working Areas Sizing: Manual vs. Automatic Policy - A Comprehensive Analysis(阿里通义 | 530点数解答 | 2024-05-13 10:55:58)308
- Java 实战:动物类、接口与继承实现鸟儿吃虫和飞翔功能(字节豆包 | 183点数解答 | 2024-09-19 15:53:55)288
- Java 实战:动物类、接口与继承,实现鸟儿吃虫与飞翔功能(字节豆包 | 184点数解答 | 2024-09-19 16:45:48)309
- Java 实现 BankAccount 类:账户余额管理与测试全解析(字节豆包 | 420点数解答 | 2024-10-11 08:48:21)315
- Java 编程:实现教师与学生类的创建、继承及属性操作(字节豆包 | 745点数解答 | 2024-10-16 18:40:42)394
- Java 实现 Circle 类:全面封装圆的属性与方法(字节豆包 | 256点数解答 | 2024-10-27 16:34:37)244
- Java 实现继承关系:Fu 类、Zi 类与测试类 Example04 代码解析及注意要点(字节豆包 | 251点数解答 | 2024-12-12 09:36:45)246