网站建设能给客户带来什么,邮箱登陆嵌入网站,医院网站建设ppt,重庆做网站价格C 智能指针简单介绍及用法
智能指针是 C11 引入的一个非常实用的特性#xff0c;旨在自动管理动态分配的内存#xff0c;避免内存泄漏和悬空指针问题。主要有三种类型的智能指针#xff1a;std::unique_ptr、std::shared_ptr 和 std::weak_ptr。下面是对它们的详细介绍 智能指针简单介绍及用法
智能指针是 C11 引入的一个非常实用的特性旨在自动管理动态分配的内存避免内存泄漏和悬空指针问题。主要有三种类型的智能指针std::unique_ptr、std::shared_ptr 和 std::weak_ptr。下面是对它们的详细介绍
1. std::unique_ptr 特性 独占所有权每个 std::unique_ptr 实例只能拥有一个对象的唯一所有权。不可复制不能复制 unique_ptr但可以移动使用移动构造函数或移动赋值运算符。 使用场景适用于表示唯一的拥有关系不需要共享所有权的情况。 示例 #include iostream
#include memoryvoid uniquePtrExample() {std::unique_ptrint ptr1(new int(10)); // 创建 unique_ptrstd::cout *ptr1 std::endl; // 使用指针std::unique_ptrint ptr2 std::move(ptr1); // 转移所有权// std::cout *ptr1; // 错误ptr1 已经不再拥有对象
}2. std::shared_ptr 特性 共享所有权多个 std::shared_ptr 实例可以指向同一个对象。引用计数通过引用计数来管理对象的生命周期当最后一个 shared_ptr 被销毁时内存会自动释放。 使用场景适用于多个对象共享同一资源的情况。 示例 #include iostream
#include memoryvoid sharedPtrExample() {std::shared_ptrint ptr1(new int(20)); // 创建 shared_ptr{std::shared_ptrint ptr2 ptr1; // ptr2 也指向同一个对象std::cout *ptr2 std::endl; // 输出 20} // ptr2 离开作用域后引用计数减少std::cout *ptr1 std::endl; // 仍然有效输出 20
}3. std::weak_ptr 特性 弱引用提供对 shared_ptr 指向对象的非拥有性引用。不增加引用计数不会影响对象的生命周期。 使用场景用于防止循环引用或者在需要检查资源是否仍然有效时。 示例 #include iostream
#include memoryvoid weakPtrExample() {std::shared_ptrint sptr(new int(30));std::weak_ptrint wptr sptr; // 创建 weak_ptrif (auto sptr2 wptr.lock()) { // 检查 weak_ptr 是否有效std::cout *sptr2 std::endl; // 输出 30}sptr.reset(); // 删除 sptr 指向的对象if (auto sptr2 wptr.lock()) {std::cout *sptr2 std::endl; // 输出为空指向的对象已被释放} else {std::cout 资源已被释放 std::endl;}
}总结
利用智能指针可以帮助我们有效管理内存降低内存泄漏的风险提高程序的安全性和稳定性。 选择合适的智能指针类型可以使代码更简洁和易于维护。