爆款云主机2核4G限时秒杀,88元/年起!
查看详情

活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
热门活动
  • 618智算钜惠季 爆款云主机2核4G限时秒杀,88元/年起!
  • 免费体验DeepSeek,上天翼云息壤 NEW 新老用户均可免费体验2500万Tokens,限时两周
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云脑AOne NEW 连接、保护、办公,All-in-One!
  • 中小企业应用上云专场 产品组合下单即享折上9折起,助力企业快速上云
  • 息壤高校钜惠活动 NEW 天翼云息壤杯高校AI大赛,数款产品享受线上订购超值特惠
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

智算服务

打造统一的产品能力,实现算网调度、训练推理、技术架构、资源管理一体化智算服务
智算云(DeepSeek专区)
科研助手
  • 算力商城
  • 应用商城
  • 开发机
  • 并行计算
算力互联调度平台
  • 应用市场
  • 算力市场
  • 算力调度推荐
一站式智算服务平台
  • 模型广场
  • 体验中心
  • 服务接入
智算一体机
  • 智算一体机
大模型
  • DeepSeek-R1-昇腾版(671B)
  • DeepSeek-R1-英伟达版(671B)
  • DeepSeek-V3-昇腾版(671B)
  • DeepSeek-R1-Distill-Llama-70B
  • DeepSeek-R1-Distill-Qwen-32B
  • Qwen2-72B-Instruct
  • StableDiffusion-V2.1
  • TeleChat-12B

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入云市场创新解决方案
办公协同
  • WPS云文档
  • 安全邮箱
  • EMM手机管家
  • 智能商业平台
财务管理
  • 工资条
  • 税务风控云
企业应用
  • 翼信息化运维服务
  • 翼视频云归档解决方案
工业能源
  • 智慧工厂_生产流程管理解决方案
  • 智慧工地
建站工具
  • SSL证书
  • 新域名服务
网络工具
  • 翼云加速
灾备迁移
  • 云管家2.0
  • 翼备份
资源管理
  • 全栈混合云敏捷版(软件)
  • 全栈混合云敏捷版(一体机)
行业应用
  • 翼电子教室
  • 翼智慧显示一体化解决方案

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云服务合作伙伴
  • 天翼云集成商交付能力认证
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴
  • 天翼云甄选商城合作伙伴
天翼云技术合作伙伴
  • 天翼云OpenAPI中心
  • 天翼云EasyCoding平台
天翼云培训认证
  • 天翼云学堂
  • 天翼云市场商学院
天翼云合作计划
  • 云汇计划
天翼云东升计划
  • 适配中心
  • 东升计划
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
  • 专栏文章
  • 互动问答
  • 技术视频
资源与工具
  • OpenAPI中心
开放能力
  • EasyCoding敏捷开发平台
培训与认证
  • 天翼云学堂
  • 天翼云认证
魔乐社区
  • 魔乐社区

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • OpenAPI中心
定价
  • 价格计算器
  • 定价策略
基础服务
  • 售前咨询
  • 在线支持
  • 在线支持
  • 工单服务
  • 建议与反馈
  • 用户体验官
  • 服务保障
  • 客户公告
  • 会员中心
增值服务
  • 红心服务
  • 首保服务
  • 客户支持计划
  • 专家技术服务
  • 备案管家

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云
  • 智算云
  • 天翼云4.0
  • 新闻资讯
  • 天翼云APP
基础设施
  • 全球基础设施
  • 信任中心
最佳实践
  • 精选案例
  • 超级探访
  • 云杂志
  • 分析师和白皮书
  • 天翼云·创新直播间
市场活动
  • 2025智能云生态大会
  • 2024智算云生态大会
  • 2023云生态大会
  • 2022云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 智算服务
  • 产品
  • 解决方案
  • 应用商城
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
      • 文档
      • 控制中心
      • 备案
      • 管理中心

      【C++】智能指针的原理和实现

      首页 知识中心 软件开发 文章详情页

      【C++】智能指针的原理和实现

      2025-02-11 09:36:24 阅读次数:13

      对象,引用,指针,智能,构造函数,计数,赋值

      不要用auto_ptr

      回顾:

      C++11 4种智能指针种,C++STL  auto_ptr 不提倡用的原因是:

      auto_ptr<TYPE> A,B;
      A = B;

      第二行执行完毕后,B的地址为0;

      这就是智能指针auto_ptr是转移语义造成的,容易让人用错的地方。

      智能指针的原理和实现

      智能指针的实现主要依赖于两个技术

      C++中智能指针的实现主要依赖于两个技术概念:

      1、析构函数,对象被销毁时会被调用的一个函数,对于基于栈的对象而言,如果对象离开其作用域则对象会被自动销毁,而此时析构函数也自动会被调用。
      2、引用计数技术,维护一个计数器用于追踪资源(如内存)的被引用数,当资源被引用时,计数器值加1,当资源被解引用时,计算器值减1。
      3、操作符重载。
      智能指针的大致实现原理就是在析构函数中,检查所引用对象的引用计数,如果引用计数为0,则真正释放该对象内存。

      我们是怎么创建原生指针的:

      // 创建一个不知所指的指针
      char *punknown ;
      // 创建空指针
      char *pnull = NULL;
      // 创建字符串指针
      const char *pstr = "Hello world!";
      // 创建指向具体类的指针
      SomeClass *pclass = new SomeClass();
      // 从同类型指针创建指针
      SomeClass *pclassother = pclass;
      

      求我们的智能指针类,也能满足对应的用法:

      //  创建一个不知所指的智能指针
      SmartPointer spunknown;
      // 创建空智能指针
      SmartPointer spnull = NULL;
      // 创建字符串的智能指针
      SmartPointer spstr = "Hello world!";
      // 创建指向具体类的智能指针
      SmartPointer spclass = new SomeClass();
      

      实现智能指针版本1

      /*
      * file name : smartpointer.h
      * desp : 智能指针版本v1
      */
      #ifndef __SMARTPOINTER_H__
      #define __SMARTPOINTER_H__
      
      template <typename T>  // 将智能指针类定义成模板类
      class SmartPointer
      {
      public:
          // 默认构造函数
          SmartPointer(): mPointer(NULL)
          {
              std::cout << "create unknown smart pointer." << std::endl;
      
          }
          // 接收不同指针类型的构造函数
          SmartPointer(T *p): mPointer(p)
          {
              std::cout << "create smart pointer at " << static_cast<const void *>(p) << std::endl;
          }
          // 析构函数
          ~SmartPointer()
          {
              std::cout << "release smart pointer at " << static_cast<const void *>(mPointer) << std::endl;
              // 实现内存资源自动销毁机制
              if (mPointer) delete mPointer;
          }
      private:
          T *mPointer; // 指向智能指针实际对应的内存资源,根据参数自动推导规则,定义内部资源指针类型
      };
      #endif // __SMARTPOINTER_H__
      

      上面的智能指针没有实现赋值和拷贝,

      默认情况下C++编译器会为我们定义的类生成拷贝构造函数和赋值操作符的实现,但是对于我们的智能指针而言,使用系统默认为我们生成的赋值操作符的实现,是会有问题的。

      拷贝构造函数和赋值构造函数的区别:

      1)会调用拷贝构造函数的例子:

       CExample A;  
       CExample B=A; //把B初始化为A的副本

      2)会调用赋值构造函数的例子:

       CExample A;  
       CExample C; 
       C = A; //现在需要一个对象赋值操作,被赋值对象的原内容被清除,并用右边对象的内容填充。 

      1)中“ CExample B=A;  ”语句中的 "=" 在对象声明语句中,表示初始化。更多时候,这种初始化也可用括号表示。 

      例CExample B(A); 

      2)中,"=" 表示赋值操作。将对象 A 的内容复制到对象C;,这其中涉及到对象C 原有内容的丢弃,新内容的复制。

      智能指针类中,有我们自己申请的内存,所以需要自己定义拷贝构造函数和赋值构造函数(完成深拷贝)

      2.2 定义构造函数和赋值操作符的函数原型

      实现智能指针版本2

      /* 
      * file name : smartpointer.h
      * desp : 智能指针版本v2
      */
      #ifndef __SMARTPOINTER_H__
      #define __SMARTPOINTER_H__
      
      template <typename T>  // 将智能指针类定义成模板类
      class SmartPointer {
      public:
          // 默认构造函数
          SmartPointer():mPointer(NULL) {std::cout <<"Create null smart pointer."<< std::endl;}    
          // 接收不同指针类型的构造函数
          SmartPointer(T *p):mPointer(p) {std::cout <<"Create smart pointer at "<<static_cast<const void*>(p)<<std::endl;}     
          // 析构函数
          ~SmartPointer(){
              std::cout << "Release smart pointer at "<<static_cast<const void*>(mPointer)<<std::endl;
              // 实现内存资源自动销毁机制
              if (mPointer) delete mPointer;
          }
          // 拷贝构造函数
          SmartPointer(const SmartPointer &other):mPointer(other.mPointer) {
              std::cout <<"Copy smart pointer at "<<static_cast<const void*>(other.mPointer)<<std::endl;
          }     
         // 赋值操作符                
         SmartPointer &operator = (const SmartPointer &other) {
              // 处理自我赋值的情况
              if (this == &other) return *this;
              // 处理底层指针的释放问题
              if (mPointer) delete mPointer;
              mPointer = other.mPointer;  
              std::cout <<"Assign smart pointer at "<<static_cast<const void*>(other.mPointer)<<std::endl;
              return *this;
         } 
      
      private:
          T *mPointer; // 指向智能指针实际对应的内存资源,根据参数自动推导规则,定义内部资源指针类型
      };
      #endif // __SMARTPOINTER_H__
      

      还是存在一些问题:就是当有多个智能指针执行同一块底层资源,在释放时,每个指针都会去释放一次底层资源,这就造成了最后的 double free 错误

      【C++】智能指针的原理和实现

      【C++】智能指针的原理和实现

      此时智能指针SmartPointer2将会变成野指针!

      所以要引入计数:

      引入引用计数的智能指针,其实现主要需要更新以下几点:

      1接收不同对象类型的构造函数

      这个构造函数实现,比较简单,直接将引用计数加1 即可。

      2析构函数

      析构函数的实现,不能再直接做delete操作,而是需要先对引用计数减1,当引用计数为0时,才做delete操作。

      3拷贝构造函数

      拷贝构造函数的实现,底层指针共享,然后将引用计数加1 即可。

      4赋值操作符

      赋值操作的实现,稍微复杂一些,涉及到将新指向对象的引用计数加1,将原指向对象的引用计数减1,如果有需要还要销毁原指向对象。这里有一点值得注意的地方,我们新的赋值操作的实现,不再需要if (this == &other) return *this;语句处理自我赋值的情况,读者可自行分析一下我们新的赋值操作的实现为何不需要通过if语句去处理自我赋值的情况。

      为了能够使用引用计数技术,我们的智能指针不能再像原生指针那样能用可以指向任意资源对象,我们的智能指针只能指向实现了存在方法incRefCount和方法decRefCount的资源类了。

      引用计数技术的智能指针v3版本:

      /* 
      * file name : smartpointer.h
      * desp : 智能指针版本v3
      */
      #ifndef __SMARTPOINTER_H__
      #define __SMARTPOINTER_H__
      
      template <typename T>  // 将智能指针类定义成模板类
      class SmartPointer {
      public:
          // 默认构造函数
          SmartPointer():mPointer(NULL) {std::cout <<"Create null smart pointer."<< std::endl;}    
          // 接收不同对象类型的构造函数
          SmartPointer(T *p):mPointer(p) {
              std::cout <<"Create smart pointer at "<<static_cast<const void*>(p)<<std::endl;
              /*智能指针指向类T,引用计数加1*/
              if (mPointer) mPointer->incRefCount();
          }     
          // 析构函数
          ~SmartPointer(){
              std::cout << "Release smart pointer at "<<static_cast<const void*>(mPointer)<<std::endl;
              // 实现内存资源自动销毁机制
              if (mPointer && mPointer->decRefCount()==0) delete mPointer;
          }
          // 拷贝构造函数
          SmartPointer(const SmartPointer &other):mPointer(other.mPointer) {
              std::cout <<"Copy smart pointer at "<<static_cast<const void*>(other.mPointer)<<std::endl;
             // 引用计数加1
             if(mPointer) mPointer->incRefCount();
          }     
         // 赋值操作符         
         SmartPointer &operator = (const SmartPointer &other) {
             T *temp(other.mPointer);
             // 新指向对象,引用计数值加1
             if (temp) temp->incRefCount();
             // 原指向对象,引用计数值减1,如果减1后引用计数为0 销毁原资源对象
             if (mPointer && mPointer->decRefCount()==0) delete mPointer;
             // 智能指针指向新资源对象
             mPointer = temp;  
             return *this;
         } 
      
      private:
          T *mPointer; // 指向智能指针实际对应的内存资源,根据参数自动推导规则,定义内部资源指针类型
      };
      
      /*引用计数基类*/
      class RefBase   
      {   
          public:   
              RefBase() : mCount(0){ }   
              void incRefCount(){   
                  mCount++;   
              }   
              int decRefCount(){   
                  return --mCount;
              }   
              // 调试接口,返回对象当前引用计数   
              int getRefCount(){   
                  return mCount;   
              }     
              virtual ~RefBase(){ }
          private:   
              int mCount;   
      };   
      #endif // __SMARTPOINTER_H__
      
      
      测试代码(sptestcase3.cpp):
      
      
      /* 
      * file name : sptestcase3.cpp
      * desp : 智能指针测试代码 case3 测试智能指针的引用计数功能
      */
      
      #include <iostream>
      #include "smartpointer.h"
      
      /*继承于引用计数基类的SomeClass类*/
      class SomeClass: public RefBase{
      public:
          SomeClass(){std::cout << "SomeClass default constructor !"<<std::endl;}
          ~SomeClass(){std::cout << "SomeClass deconstructor !"<<std::endl;}
      };
      
      void testcase3(void)
      {
          SomeClass *pSomeClass =  new SomeClass(); //1
          SmartPointer<SomeClass> spOuter = pSomeClass;
          std::cout << "SomeClass Ref Count (" << pSomeClass->getRefCount() << ") outer 1."<< std::endl;
          { // inner 语句块
                SmartPointer<SomeClass> spInner = spOuter;
                std::cout << "SomeClass Ref Count (" << pSomeClass->getRefCount() << ") inner."<< std::endl;
          }
          std::cout << "SomeClass Ref Count (" << pSomeClass->getRefCount() << ") outer 2."<< std::endl;
          // delete pSomeClass ; 不需要也不能执行delete操作!
      
          std::cout << "new another SomeClass class for spOuter."<< std::endl;
          SmartPointer<SomeClass> spOuter2 = new SomeClass();
          spOuter = spOuter2;// 1处new出来的SomeClass将会被自动释放  
      }
      
      int main(void)
      {
          testcase3();
          return 0;
      }
      
      

      还不够完美,我们使用指针指代资源对象,最终还是需要去访问资源对象的内容,那么智能指针如何满足这个需求呢?

      2.1 解引用

      我们使用指针最终还是需要通过指针去访问其所指向的资源对象的数据及方法,这个过程称为指针的解引用过程。指针的解引用可以使用*运算符和->运算符;

      我们需要重载*运算符和->运算符:

      template <typename T>  
      class SmartPointer {
      public:
          /*重载运算符* */
          T&  operator* () const;
          /*重载运算符-> */
          T* operator-> () const;
      };

      在我们的智能指针类重载了运算符后,当我们这样使用智能指针时:

      (*SmartPointer).func();
      SmartPointer->func();
      

      其实等价于:

      (*(SmartPointer.operator*())).func();
      (SmartPointer.operator->())->func();
      

      也就是说,我们在重载*运算符时其返回的应该是智能指针所指的资源对象实体, 而->运算符则应该返回的是智能指针指针所指的资源对象的内存地址,既是我们的实现是这样的:

         // 重载*和-> 运算符
          /*重载运算符* */
          T&  operator* () const {return *mPointer;};
          /*重载运算符-> */
          T* operator-> () const {return mPointer;};
      
      版权声明:本文内容来自第三方投稿或授权转载,原文地址:https://blog.csdn.net/bandaoyu/article/details/85039939,作者:bandaoyu,版权归原作者所有。本网站转在其作品的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如因作品内容、版权等问题需要同本网站联系,请发邮件至ctyunbbs@chinatelecom.cn沟通。

      上一篇:数据结构之八大排序-快速排序

      下一篇:【C++】什么是多态?虚函数的底层实现原理|多重继承|菱形继承

      相关文章

      2025-05-19 09:04:44

      js小题2:构造函数介绍与普通函数对比

      js小题2:构造函数介绍与普通函数对比

      2025-05-19 09:04:44
      new , 关键字 , 函数 , 对象 , 构造函数
      2025-05-19 09:04:22

      外设驱动库开发笔记54:外设库驱动设计改进的思考

      外设驱动库开发笔记54:外设库驱动设计改进的思考

      2025-05-19 09:04:22
      使用 , 函数 , 初始化 , 定义 , 对象
      2025-05-19 09:04:22

      外设驱动库开发笔记46:MAX31855热偶变送器驱动

      外设驱动库开发笔记46:MAX31855热偶变送器驱动

      2025-05-19 09:04:22
      对象 , 温度
      2025-05-16 09:15:24

      jQuery遍历对象、数组、集合

      jQuery遍历对象、数组、集合

      2025-05-16 09:15:24
      jQuery , 对象 , 数组 , 遍历 , 集合
      2025-05-14 10:33:31

      计算机初级选手的成长历程——操作符详解(2)

      计算机初级选手的成长历程——操作符详解(2)

      2025-05-14 10:33:31
      对象 , 操作 , 操作符 , 表达式 , 运算 , 逗号 , 逻辑
      2025-05-14 10:33:16

      30天拿下Rust之切片

      在Rust中,切片是一种非常重要的引用类型。它允许你安全地引用一段连续内存中的数据,而不需要拥有这些数据的所有权。切片不包含分配的内存空间,它仅仅是一个指向数据开始位置和长度的数据结构。

      2025-05-14 10:33:16
      amp , end , 切片 , 字符串 , 引用 , 索引 , 迭代
      2025-05-14 10:33:16

      30天拿下Python之使用Json

      Json的英文全称为JavaScript Object Notation,中文为JavaScript对象表示法,是一种存储和交换文本信息的语法,类似XML。Json作为轻量级的文本数据交换格式,比XML更小、更快,更易解析,也更易于阅读和编写。

      2025-05-14 10:33:16
      json , Json , Python , 字符串 , 对象 , 序列化 , 转换
      2025-05-14 10:33:16

      C++ 11新特性之unique_ptr

      在C++ 11标准中,智能指针作为一种强大的资源管理工具被引入,极大地提升了代码的健壮性和安全性。其中,std::unique_ptr作为唯一所有权智能指针,以其独特的非拷贝特性及自动内存释放机制,成为现代C++编程中的重要组件。

      2025-05-14 10:33:16
      ptr , std , unique , 指向 , 指针 , 赋值
      2025-05-14 10:07:38

      30天拿下Rust之引用

      在Rust语言中,引用机制是其所有权系统的重要组成部分,它为开发者提供了一种既高效又安全的方式来访问和共享数据。引用可以被视为一个指向内存地址的指针,它允许我们间接地访问和操作存储在内存中的数据。

      2025-05-14 10:07:38
      Rust , text , 可变 , 引用 , 数据
      2025-05-14 10:07:38

      C++ 11新特性之shared_ptr

      在C++ 11标准中,智能指针作为一种自动资源管理工具被引入,极大地提升了代码的健壮性和安全性。其中,std::shared_ptr作为多所有权智能指针,凭借其独特的引用计数机制和内存自动释放功能,成为现代C++开发中的重要组件。

      2025-05-14 10:07:38
      ptr , shared , std , 引用 , 抛出 , 指针 , 计数
      查看更多
      推荐标签

      作者介绍

      天翼云小翼
      天翼云用户

      文章

      33561

      阅读量

      5241732

      查看更多

      最新文章

      外设驱动库开发笔记54:外设库驱动设计改进的思考

      2025-05-19 09:04:22

      外设驱动库开发笔记46:MAX31855热偶变送器驱动

      2025-05-19 09:04:22

      30天拿下Python之使用Json

      2025-05-14 10:33:16

      C++ 11新特性之unique_ptr

      2025-05-14 10:33:16

      C++ 11新特性之shared_ptr

      2025-05-14 10:07:38

      C++ 11新特性之bind

      2025-05-14 10:03:05

      查看更多

      热门文章

      游戏编程之十一 图像页CPICPAGE介绍

      2022-11-28 01:25:04

      C++拷贝构造函数(深拷贝,浅拷贝)详解

      2023-03-30 09:59:46

      C语言结构体与结构体指针的使用

      2023-03-08 10:38:36

      C++入门篇之C++ 指针

      2023-03-14 11:26:53

      指针(*)、取地址(&)、解引用(*)与引用(&)

      2023-04-10 08:54:19

      C++类的实例:一个向量类(Vector)

      2023-03-02 02:40:07

      查看更多

      热门标签

      java Java python 编程开发 代码 开发语言 算法 线程 Python html 数组 C++ 元素 javascript c++
      查看更多

      相关产品

      弹性云主机

      随时自助获取、弹性伸缩的云服务器资源

      天翼云电脑(公众版)

      便捷、安全、高效的云电脑服务

      对象存储

      高品质、低成本的云上存储服务

      云硬盘

      为云上计算资源提供持久性块存储

      查看更多

      随机文章

      C++引用与指针的区别

      如何在Vue3中处理异步API调用并更新表单数据(附Demo)

      C++11新的类功能

      Flutter与Kotlin和Java的等义对比(简单函数&变/常量)

      Java之异常(下):自定义异常类

      【JavaSE】构造方法基本使用

      • 7*24小时售后
      • 无忧退款
      • 免费备案
      • 专家服务
      售前咨询热线
      400-810-9889转1
      关注天翼云
      • 旗舰店
      • 天翼云APP
      • 天翼云微信公众号
      服务与支持
      • 备案中心
      • 售前咨询
      • 智能客服
      • 自助服务
      • 工单管理
      • 客户公告
      • 涉诈举报
      账户管理
      • 管理中心
      • 订单管理
      • 余额管理
      • 发票管理
      • 充值汇款
      • 续费管理
      快速入口
      • 天翼云旗舰店
      • 文档中心
      • 最新活动
      • 免费试用
      • 信任中心
      • 天翼云学堂
      云网生态
      • 甄选商城
      • 渠道合作
      • 云市场合作
      了解天翼云
      • 关于天翼云
      • 天翼云APP
      • 服务案例
      • 新闻资讯
      • 联系我们
      热门产品
      • 云电脑
      • 弹性云主机
      • 云电脑政企版
      • 天翼云手机
      • 云数据库
      • 对象存储
      • 云硬盘
      • Web应用防火墙
      • 服务器安全卫士
      • CDN加速
      热门推荐
      • 云服务备份
      • 边缘安全加速平台
      • 全站加速
      • 安全加速
      • 云服务器
      • 云主机
      • 智能边缘云
      • 应用编排服务
      • 微服务引擎
      • 共享流量包
      更多推荐
      • web应用防火墙
      • 密钥管理
      • 等保咨询
      • 安全专区
      • 应用运维管理
      • 云日志服务
      • 文档数据库服务
      • 云搜索服务
      • 数据湖探索
      • 数据仓库服务
      友情链接
      • 中国电信集团
      • 189邮箱
      • 天翼企业云盘
      • 天翼云盘
      ©2025 天翼云科技有限公司版权所有 增值电信业务经营许可证A2.B1.B2-20090001
      公司地址:北京市东城区青龙胡同甲1号、3号2幢2层205-32室
      • 用户协议
      • 隐私政策
      • 个人信息保护
      • 法律声明
      备案 京公网安备11010802043424号 京ICP备 2021034386号