⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sharedstring.cpp.html

📁 《Big C++ 》Third Edition电子书和代码全集-Part1
💻 HTML
字号:
<html>
<body>
<pre>  1  #include &lt;iostream&gt;
  2  
  3  using namespace std;
  4  
  5  class SharedString 
  6  {
  7  public:
  8      SharedString();
  9      SharedString(const char* right);
 10      SharedString(const SharedString&amp; right);
 11      ~SharedString();
 12      SharedString&amp; operator=(const SharedString&amp;);
 13  private:
 14      class StringReference;
 15      StringReference* p;
 16      void reassign(StringReference*);
 17  };
 18  
 19  class SharedString::StringReference 
 20  {
 21  public:
 22     int count;
 23     char* buffer;
 24     StringReference(const char* right);
 25     ~StringReference();
 26  };
 27  
 28  SharedString::SharedString() : p(NULL)
 29  {
 30     cout &lt;&lt; "Entering SharedString() \n";
 31  }
 32  
 33  SharedString::SharedString(const char* right) : p(NULL) 
 34  {
 35     reassign(new StringReference(right));
 36  }
 37  
 38  SharedString::SharedString(const SharedString&amp; right) : p(NULL)
 39  {
 40     reassign(right.p);
 41  }
 42  
 43  SharedString::~SharedString()
 44  {
 45     reassign(NULL);
 46  }
 47  
 48  SharedString&amp; SharedString::operator=(const SharedString&amp; right)
 49  {
 50     reassign(right.p);
 51     return *this;
 52  }
 53  
 54  void SharedString::reassign(StringReference* np)
 55  {
 56     if (np != NULL) // Increment count on the new value
 57        np-&gt;count += 1;
 58     if (p != NULL)  // Decrement reference counts on old value
 59     {
 60        p-&gt;count -= 1;
 61        if (p-&gt;count == 0)
 62           delete p;
 63     }
 64     p = np;  // Change binding
 65  }
 66  
 67  SharedString::StringReference::StringReference(const char* right)
 68  {
 69     count = 0;
 70     int n = 0;
 71     while (right[n] != '\0')
 72        n++;
 73     buffer = new char[1 + n];
 74     for (int i = 0; i &lt; n; i++)
 75        buffer[i] = right[i];
 76     buffer[n] = '\0';
 77  }
 78  
 79  SharedString::StringReference::~StringReference()
 80  {
 81     delete [] buffer;
 82  }
 83  
 84  SharedString g; // global value
 85  
 86  int main ( )
 87  {
 88          cout &lt;&lt; "starting execution\n";
 89          cout &lt;&lt; "SharedString a = \"Fred\";\n";
 90      SharedString a = "Fred";
 91          cout &lt;&lt; "SharedString b = \"Alice\";\n";
 92      SharedString b = "Alice";
 93          cout &lt;&lt; "SharedString c;\n";
 94      SharedString c;
 95          cout &lt;&lt; "c = a;\n";
 96      c = a;
 97          cout &lt;&lt; "a = b;\n";
 98      a = b;
 99          cout &lt;&lt; "g = b;\n";
100      g = b;
101      cout &lt;&lt; "return 0;\n";
102      return 0;
103  }</pre>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -