我們知道在C++中動態(tài)開辟空間時是用字符new和delete的。其中使用new test[N]方式開辟空間時實際上是開辟了(N*sizeof(test)+4)字節(jié)的空間。如圖示大學生就業(yè)培訓,高中生培訓,在職人員轉行培訓,企業(yè)團訓其中保存N的值主要用于析構函數(shù)中析構對象的次數(shù)delete[] p時先取N(*((int*)p-1))。我們參照這種機制在實現(xiàn)String類的時候提供一個計數(shù),將指向new開辟的空間的指針個數(shù)保存下來,當計數(shù)不小于或不等于0時不進行析構對象,也不釋放空間。直到計數(shù)為0時釋放空間。大學生就業(yè)培訓,高中生培訓,在職人員轉行培訓,企業(yè)團訓

String的所有賦值、拷貝構造操作,計數(shù)器都會 +1 ; string 對象析構時,如果計數(shù)器為 0 則釋放內存空間,否則計數(shù)器 -1 。實現(xiàn)代碼如下

大學生就業(yè)培訓,高中生培訓,在職人員轉行培訓,企業(yè)團訓

 1 //引用計數(shù)方法  2 int my_strlen(const char *p)  3 {  4     int count = 0;  5     assert(p);  6     while (*p != '\0')  7     {  8         p++;  9         count++; 10     } 11     return count; 12 } 13 char* my_strcopy(char* dest, const char* str) 14 { 15     assert(dest != NULL); 16     assert(str != NULL); 17     char* ret = dest; 18     while (*de