写时拷贝技术是通过"引用计数"实现的,在分配空间的时候多分配4个字节,用来记录有多少个指针指向块空间,当有新的指针指向这块空间时,引用计数加一,当要释放这块空间时,引用计数减一(假装释放),直到引用计数减为0时才真的释放掉这块空间。当有的指针要改变这块空间的值时,再为这个指针分配自己的空间(注意这时引用计数的变化,旧的空间的引用计数减一,新分配的空间引用计数加一)。
#include<iostream> #include<new.h> #include<string> using namespace std; //1解决内存泄漏 //2编写赋值语句 //3写时拷贝 class String; ostream& operator<<(ostream &out, const String &s); ///////////////////////////////////////////////////////////////////// class String_rep { friend class String; friend ostream& operator<<(ostream &out, const String &s); private: String_rep(const char *str = "") : use_count_(0) { if (str == NULL) { data = new char[1]; data[0] = '