在C++中,使用 `new` 关键字动态分配的内存需要通过 `delete` 或 `delete[]` 来释放。以下是几种常见的需要使用 `delete` 或 `delete[]` 来释放的情况:
1. 使用 `new` 分配的单个对象:
```cpp
MyClass* ptr = new MyClass;
// 使用 ptr...
delete ptr; // 释放内存
```
2. 使用 `new[]` 分配的数组:
```cpp
int* arr = new int[10];
// 使用 arr...
delete[] arr; // 释放数组内存
```
3. **使用 `new` 分配的数组中的对象**:
```cpp
MyClass* objects = new MyClass[5];
// 使用 objects...
delete[] objects; // 释放对象数组内存
```
4. **智能指针管理的对象**:
- 如果你使用了智能指针(如 `std::unique_ptr` 或 `std::shared_ptr`),通常不需要手动调用 `delete`,因为智能指针会在超出作用域时自动释放所管理的资源。
```cpp
std::unique_ptr<MyClass> uptr(new MyClass);
// 使用 uptr...
// 不需要手动删除,uptr 会在超出作用域时自动释放内存
```
5. **自定义的 `new` 和 `delete` 操作符**:
- 如果你重写了全局的 `new` 和 `delete` 操作符,或者类内的 `operator new` 和 `operator delete`,那么你需要确保使用正确的 `delete` 操作符来释放内存。
### 注意事项:
1. **不要重复释放内存**:
- 确保每个通过 `new` 分配的内存只被释放一次。重复释放会导致未定义行为。
2. **使用智能指针**:
- 使用现代C++时,推荐使用智能指针(如 `std::unique_ptr` 或 `std::shared_ptr`)来管理动态分配的内存,以避免内存泄漏和悬空指针的问题。
3. **避免使用裸指针**:
- 当使用裸指针时,需要特别注意内存管理和生命周期问题。尽量使用智能指针来代替裸指针。
在C++中,使用 `new` 分配的内存必须通过 `delete` 或 `delete[]` 来释放。在现代C++中,推荐使用智能指针来管理动态分配的内存,以减少内存泄漏的风险。
使用 new
分配内存时,应该将结果赋值给一个指针变量,而不是直接赋值给一个普通变量。另外,释放内存时也需要使用指针变量。
错误的代码:
MyClass a = new MyClass; // 错误
delete a; // 错误