安思成的blog - 复制移动
type: channel
link: https://www.ansicheng.net/blog/tag/%E5%A4%8D%E5%88%B6%E7%A7%BB%E5%8A%A8/
items: 源码看stl版本演进中string实现的变化——拷贝/移动的构造和赋值的实质动作和效率

源码看stl版本演进中string实现的变化——拷贝/移动的构造和赋值的实质动作和效率
type: item
date: 2024-06-26T14:00:00+00:00
description: C++标准库STL中的字符串string是基本类型，标准进化过程中对string的最终接口和行为方式有过变化和调整，主要的是C++11要求string不能使用COW(Copy on Write)机制。C++11前很多STL实现(以HP STL为基础衍生)使用的是引用计数支持的写时拷贝方式，即所谓COW，C++11后的基本使用独立堆空间读写各自内存。这个主要变化前后，string复制和构造的方式，执行过程中着重点，资源和效率都有不同，在源码实现分析下这些变化，可总结出使用string各程序环境的功能实施和效率影响。代码分析以g++采用的SGI STL为例，gcc支持C++11在版本4.8.5，不同的实现在这个版本前后。[...]