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

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

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

 1 //引用計(jì)數(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
        
		

網(wǎng)友評論