在C++中,动态分配的内存需要手动释放
delete
释放单个对象:int* ptr = new int; // 分配内存
// ... 使用ptr做一些操作
delete ptr; // 释放内存
delete[]
释放对象数组:int* arr = new int[10]; // 分配内存
// ... 使用arr做一些操作
delete[] arr; // 释放内存
智能指针会在离开作用域时自动释放内存,无需手动操作。
#include<memory>
std::unique_ptr<int> ptr(new int); // 分配内存,并用unique_ptr管理
// ... 使用ptr做一些操作
// 不需要手动释放内存,当ptr离开作用域时,内存会自动被释放
请注意,在释放内存后,务必将指针置为nullptr
,以避免悬挂指针(dangling pointer)问题。
delete ptr;
ptr = nullptr;
或者,使用智能指针时,不需要手动置空。
std::unique_ptr<int> ptr(new int);
// ... 使用ptr做一些操作
ptr.reset(); // 释放内存并置空