String定义

是一个模版:

template<class _E, class _Tr=char_traits<_E>, class _A=allocator<_E> >
class Mybasic_string

空间分配

先去增长空间_Grow,32个空间,额外增加一个\0;头部是引用计数最大是255(char最大值)。

然后调用copy方法。

深度拷贝和浅拷贝

浅拷贝:

把string s1=s;

把s1的ptr指向s的ptr,并把ptr指向的空间的头部元素的引用计数++;

当要释放的时候,如果引用计数不为0,就不去释放空间,至少减少引用计数。

深度拷贝:

如果要修改对象的时,必须要进行深度拷贝;否则修改空间的数据,所有的对象的都被修改了。

深度拷贝,必须重新开辟空间,并进行拷贝,并被冻结,引用计数被设置为255,不允许浅拷贝。

STL-String源码分析相关推荐

  1. Java源码详解四:String源码分析--openjdk java 11源码

    文章目录 注释 类的继承 数据的存储 构造函数 charAt函数 equals函数 hashCode函数 indexOf函数 intern函数 本系列是Java详解,专栏地址:Java源码分析 Str ...

  2. String源码分析,中高级Java开发面试题

    空参构造 public String() {this.value = "".value;} 解析 String str=new String("abc");1. ...

  3. String源码分析

    最近开始阅读java底层的源码,是因为发现越到后面越发现读源码的重要性,真的很重要,不阅读源码,你会发现"路"越走越窄. 今天看到了String的这个构造方法, /*** Init ...

  4. 【JAVA源码分析——Java.lang】String源码分析

    String 基本实现 初学java经常会误认为String是java基本类型,实际上String并非Java基本类型,String本质上是对char数组的封装. 以下是String实现相关源码 /* ...

  5. Java中的String为什么是不可变的? -- String源码分析

    什么是不可变对象? 众所周知, 在Java中, String类是不可变的.那么到底什么是不可变的对象呢? 可以这样认为:如果一个对象,在它创建完成之后,不能再改变它的状态,那么这个对象就是不可变的.不 ...

  6. Java-Integer源码分析

    除了两种浮点型,剩下的几种基本数据类型的包装类几乎都实现了常量池,有好处用数据的时候直接去拿,没有再去创建,坏处是在程序编译的时候就存入大量数据不管用不用到.下面是一篇很好的文章,很详细,转自:htt ...

  7. Okhttp源码分析以及Google Gson解析json数据实例

    Okhttp Github的Okhttp OkHttp是一个高效的HTTP客户端,它有以下默认特性: 支持HTTP/2,允许所有同一个主机地址的请求共享同一个socket连接 透明的GZIP压缩减少响 ...

  8. 【Android】Retrofit基础源码分析

    文章目录 流程图 基本使用 1. 创建服务端ApiInterface 2.配置BaseUrl生成Retrofit对象 3.生成服务端ApiInterface对象 4.调用服务端ApiInterface ...

  9. STL 源码分析之string(一)基础篇

    STL源码下载: https://www.sgi.com/tech/stl/download.html vs工程代码:http://download.csdn.net/download/jmh1996 ...

  10. 【转】源码分析C++的string实现

    转自:源码分析C++的string实现 - 知乎 我们平时使用C++开发过程中或多或少都会使用std::string,但您了解string具体是如何实现的吗,这里程序喵给大家从源码角度分析一下. 读完 ...

最新文章

  1. [转] android自动化之MonkeyRunner测试环境配置(一)
  2. 趋势发展之人工智能,入行要趁早
  3. C++在windows下获取本地主机ipv4地址和ipv6地址的代码
  4. Android之用命令uninstall卸载apk和用 -i 过滤日志忽略大小写
  5. ABC 189 E - Rotate and Flip 矩阵转移
  6. 三人小组关系c语言编程,理性分析一下c-block三人组的实力
  7. TypeScript 类
  8. EasyUI的datagrid每行数据添加操作按钮的方法
  9. MySQL 8.0.12 基于Windows 安装教程
  10. ConstraintLayout约束控件详解
  11. HR:你为什么选择计算机这个行业?
  12. AE、PR视频压缩导出mp4、mov格式插件:AfterCodecs1.6.1汉化破解版
  13. 阮一峰——未来世界的幸存者摘要
  14. 《演讲的力量》TED主席和首席教练教你演讲的基本技巧
  15. APISpace 银行卡三要素API 推荐
  16. js 提取行间事件和多个标签 实现checkbook的全选、不选和反选
  17. Codeforces Round #459 (Div. 1) B. MADMAX
  18. 几个ts的接口练习题
  19. 论文阅读:pFabric: Minimal Near-Optimal Datacenter Transport
  20. PAT 1009. 说反话

热门文章

  1. 操作系统实验报告2:Linux 下 x86 汇编语言1
  2. 【数据结构与算法】之深入解析“安装栅栏”的求解思路与算法示例
  3. iOS之深入解析bitcode的功能与应用
  4. 2018\National _Java_A\1.三角形面积
  5. 657. Robot Return to Origin 机器人能否返回原点
  6. 410. Split Array Largest Sum 分割数组的最大值
  7. The Triangle
  8. 【机器视觉】 fuzzy_measure_pairs算子
  9. 【ARM】ARM处理器寻址方式
  10. 【Linux系统编程】信号 (下)