智能指针unique
- 什么是智能指针:
- 就像是一个自动管家
- 帮你管理内存
- 自动清理不需要的内存
- 防止内存泄漏
- unique_ptr 的特点:
- 独占所有权:一个资源只能被一个 unique_ptr 管理
- 不能复制:只能移动
- 自动释放:当 unique_ptr 被销毁时,自动释放内存
// 传统方式(可能出问题)
void bad_example() {int* p = new int(10); // 分配内存// 如果这里发生异常,内存就泄漏了delete p; // 释放内存
}// 使用智能指针(安全)
void good_example() {std::unique_ptr<int> p = std::make_unique<int>(10);// 不需要手动删除,会自动清理
}
只能移动,不能复制:
// 创建两个智能指针
std::unique_ptr<int> p1 = std::make_unique<int>(10);
std::unique_ptr<int> p2;// 移动所有权
p2 = std::move(p1); // p1 变为空,p2 获得所有权// 错误示例
p2 = p1; // 错误!不能复制
// 1. 创建对象
auto p = std::make_unique<MyClass>();// 2. 作为函数参数
void process(std::unique_ptr<MyClass> p) {// 使用 p
}// 3. 作为返回值
std::unique_ptr<MyClass> create() {return std::make_unique<MyClass>();
}// 4. 在容器中使用
std::vector<std::unique_ptr<MyClass>> objects;