C++ 智能指针:std::shared_ptr 和 std::unique_ptr 使用指南及示例
C++ 中的智能指针是一种用于管理动态分配的内存的指针,它们可以自动进行内存的分配和释放,避免了手动管理内存的麻烦。C++11 引入了两种类型的智能指针:std::shared_ptr 和 std::unique_ptr。下面是它们的使用说明和示例:
- std::shared_ptr: std::shared_ptr 是一种可以共享所有权的智能指针。多个 std::shared_ptr 对象可以指向同一个动态分配的内存,当最后一个 std::shared_ptr 对象离开作用域时,内存会自动释放。
使用示例:
#include <memory>
#include <iostream>
int main() {
std::shared_ptr<int> p1(new int(10)); // 创建一个指向 int 的 shared_ptr,初始值为 10
std::shared_ptr<int> p2 = p1; // 复制 p1,p1 和 p2 共享同一块内存
std::cout << *p1 << std::endl; // 输出 10
std::cout << *p2 << std::endl; // 输出 10
*p1 = 20; // 修改内存中的值
std::cout << *p1 << std::endl; // 输出 20
std::cout << *p2 << std::endl; // 输出 20
return 0;
}
- std::unique_ptr: std::unique_ptr 是一种独占所有权的智能指针。每个 std::unique_ptr 对象只能指向动态分配的内存的唯一所有者,当 std::unique_ptr 对象离开作用域时,内存会自动释放。
使用示例:
#include <memory>
#include <iostream>
int main() {
std::unique_ptr<int> p1(new int(10)); // 创建一个指向 int 的 unique_ptr,初始值为 10
std::cout << *p1 << std::endl; // 输出 10
// std::unique_ptr<int> p2 = p1; // 错误!unique_ptr 不能复制所有权
std::unique_ptr<int> p2 = std::move(p1); // 使用 std::move 转移所有权
// std::cout << *p1 << std::endl; // 错误!p1 不再拥有内存的所有权
std::cout << *p2 << std::endl; // 输出 10
*p2 = 20; // 修改内存中的值
std::cout << *p2 << std::endl; // 输出 20
return 0;
}
这些是 C++ 中智能指针的基本使用说明和示例。它们大大简化了内存管理的工作,并提供了更安全和高效的方式来处理动态分配的内存。
原文地址: https://www.cveoy.top/t/topic/95V 著作权归作者所有。请勿转载和采集!