CString类是vc中一个有关字符串处理的类,其中用到了很多好的技法,如写时复制
技法,内存管理技法等,处理字符串的效率是很高的。
这里仅谈谈copy-on-write技法的实现。
我以vc6中的mfc为例。
或许你曾写过如下的代码:
CString str_a = "abcd";
CString str_b = str_a;
当你调试程序时,你可能发现str_a 和 str_b 这两个对象中的唯一的一个data member m_pchDATA是指向同样的一个内存地址,即字符串abcd在堆中的首地址,也即字符串abcd在内存中只有一份copy,并不是两份数据。
当你再次写下如下代码时
str_a = “efg”;
会发现str_a的m_pchDATA指向了堆中的另一块内存efg,并没有将str_b中包含的数据覆盖掉。
可是CString的内存布局只有一个data member(因为它没有继承关系,所以没有虚函数,也就没有虚函数表指针)m_pchData,指向字符串数据,我们也没看见什么引用计数的变量呀。
那么CString