首页 > 其他分享 >智能指针的创建

智能指针的创建

时间:2024-10-08 17:25:24浏览次数:1  
标签:std 创建 weak 智能 shared unique ptr 指针

智能指针是 C++ 中用于自动管理动态分配内存的工具,主要有三种类型:std::unique_ptrstd::shared_ptrstd::weak_ptr。下面是如何创建和使用这些智能指针的详细说明:

1. std::unique_ptr

  • 用途std::unique_ptr 是一种独占式智能指针,确保指向的对象在同一时间只能被一个指针拥有。它在作用域结束时自动释放其管理的对象。

  • 创建

    #include <memory>
    
    std::unique_ptr<int> ptr1 = std::make_unique<int>(10); // 创建并初始化
    
  • 使用

    if (ptr1) {
        std::cout << *ptr1 << std::endl; // 输出 10
    }
    
  • 注意std::unique_ptr 不支持复制,但支持移动:

    std::unique_ptr<int> ptr2 = std::move(ptr1); // ptr1 现在为空,ptr2 拥有对象
    

2. std::shared_ptr

  • 用途std::shared_ptr 允许多个指针共同拥有同一个对象,通过引用计数来管理对象的生命周期。只要有 shared_ptr 指向对象,它就不会被释放。

  • 创建

    #include <memory>
    
    std::shared_ptr<int> ptr3 = std::make_shared<int>(20); // 创建并初始化
    
  • 使用

    std::cout << *ptr3 << std::endl; // 输出 20
    
  • 引用计数:当 shared_ptr 被复制时,会增加引用计数,当最后一个 shared_ptr 被销毁或重置时,管理的对象才会被释放。

3. std::weak_ptr

  • 用途std::weak_ptr 用于解决 shared_ptr 的循环引用问题。它不会增加引用计数,只是对 shared_ptr 的弱引用。当需要访问对象时,可以将 weak_ptr 升级为 shared_ptr

  • 创建

    #include <memory>
    
    std::weak_ptr<int> weakPtr = ptr3; // 指向一个 shared_ptr,但不增加引用计数
    
  • 使用

    if (auto sharedPtr = weakPtr.lock()) { // 尝试升级为 shared_ptr
        std::cout << *sharedPtr << std::endl; // 如果成功,输出 20
    } else {
        std::cout << "Object has been deleted." << std::endl;
    }
    

总结

  • std::unique_ptr 用于独占管理,确保内存的唯一所有权。
  • std::shared_ptr 用于共享所有权,适合多个地方需要访问同一个对象的场景。
  • std::weak_ptr 用于避免循环引用的情况,提供对 shared_ptr 的非拥有性访问。

使用智能指针可以大大减少内存泄漏和错误管理内存的风险,是现代 C++ 编程的重要部分。

标签:std,创建,weak,智能,shared,unique,ptr,指针
From: https://www.cnblogs.com/niumachen/p/18452110

相关文章

  • 智能充气泵解决方案
     智能充气泵,作为一种现代化的气体压缩工具,已经广泛应用于汽车、摩托车、自行车轮胎以及各类球类的充气需求中。它通过内置的压力传感器实时检测气体压力,并通过微处理器精确控制马达的工作状态,以实现高效、安全的气体压缩和充气过程。智能充气泵的核心部件包括压力传感器、微处理......
  • 广州wms智能仓储管理系统 盈致WMS系统服务商
    wms智能仓储管理系统是一种用于管理仓库操作和库存流动的软件系统,旨在提高仓库管理效率、降低成本、减少错误和优化库存控制。以下是WMS智能仓储管理系统的主要功能和特点:入库管理:WMS系统可以实现对入库货物的接收、分拣、上架和入库操作的管理,包括扫描条形码、RFID识别等技术,确保......
  • 广州wms智能仓储管理系统 盈致WMS系统服务商
    wms智能仓储管理系统是一种用于管理仓库操作和库存流动的软件系统,旨在提高仓库管理效率、降低成本、减少错误和优化库存控制。以下是WMS智能仓储管理系统的主要功能和特点: 入库管理:WMS系统可以实现对入库货物的接收、分拣、上架和入库操作的管理,包括扫描条形码、RFID识别等技......
  • 智能充气泵解决方案
    智能充气泵,作为一种现代化的气体压缩工具,已经广泛应用于汽车、摩托车、自行车轮胎以及各类球类的充气需求中。它通过内置的压力传感器实时检测气体压力,并通过微处理器精确控制马达的工作状态,以实现高效、安全的气体压缩和充气过程。智能充气泵的核心部件包括压力传感器、微处......
  • 创建索引时需要考虑的关键问题详解
    引言在数据库中,索引是加快数据查询速度的重要工具。通过索引,数据库可以快速定位需要的数据,而无需扫描整个表的数据。尽管索引能极大提高查询效率,但不合理的索引设计也可能导致性能下降,甚至增加不必要的系统开销。尤其在高并发的大规模数据系统中,索引的设计与优化直接关系到......
  • 手写mybatis之数据源的解析、创建和使用
    前言在上一章节我们解析XML中的SQL配置信息,并在代理对象调用DefaultSqlSession中进行获取和打印操作,从整个框架结构来看我们解决了对象的代理、Mapper的映射、SQL的初步解析,那么接下来就应该是连库和执行SQL语句并返回结果了。那么这部分内容就会涉及到解析X......
  • 用函数创建DataFrame:使用字典推导式
    importpandasaspddefmake_df(cols,ind):"""一个简单的DataFrame"""#字典推导式,为每列生成数据data={c:[str(c)+str(i)foriinind]forcincols}#创建并返回DataFramereturnpd.DataFrame(data,ind)#DataFrame示例d......
  • 使用Python实现深度学习模型:智能身份验证与防伪
    在当今数字化时代,身份验证和防伪技术变得尤为重要。深度学习作为人工智能的一个重要分支,提供了强大的工具来解决这些问题。本文将介绍如何使用Python实现一个基于深度学习的智能身份验证与防伪系统,详细讲解其基本原理和实现步骤。一、项目概述本项目旨在通过训练一个卷积......
  • 闲鱼商品搜索API:提升搜索结果的智能同步
    在互联网时代,二手交易平台日益受到广大消费者的青睐。作为国内领先的闲置交易平台,闲鱼为广大用户提供了丰富的商品资源。为了方便开发者更好地利用闲鱼平台进行应用开发,闲鱼推出了商品搜索Api接口。小编将为您详细介绍这一接口的功能及使用方法。闲鱼商品搜索Api接口,旨在帮助......
  • 在K8S中,创建一个 Pod 的主要流程?
    在Kubernetes(K8s)中创建一个Pod的主要流程可以分为以下几个步骤:1.编写Pod的配置文件首先,你需要编写一个YAML或JSON格式的配置文件来定义Pod的属性。这个文件至少包含Pod的元数据(如名称、标签等)以及Pod规格(如容器的镜像、端口映射等)。一个简单的示例配置文件......