前言:写时复制是一种比价常用的技术,Linux进程fork,VC6的String类等等,都使用了写时复制。下面利用MString类来实现一下COW,以进一步明白其中原理。
MString类设计
在我前两篇博客中实现了MString的基础实现和运算符重载(http://blog.youkuaiyun.com/z702143700/article/details/47166437;http://blog.youkuaiyun.com/z702143700/article/details/47166343)
要实现COW,其实很简单的,只需要修改拷贝构造,赋值构造,修改字符串的类,添加引用计数变量即可。
添加引用计数变量
在MString.h中添加:size_t *m_used;
代表引用的个数。
拷贝构造、赋值构造、构造函数
拷贝构造
MString::MString(const MString& s)
{
m_len = s.m_len;
m_str = s.m_str;
++*m_used;<