我们知道在C++中动态开辟空间时是用字符new和delete的。其中使用new test[N]方式开辟空间时实际上是开辟了(N*sizeof(test)+4)字节的空间。如图示大学生就业培训,高中生培训,在职人员转行培训,企业团训其中保存N的值主要用于析构函数中析构对象的次数delete[] p时先取N(*((int*)p-1))。我们参照这种机制在实现String类的时候提供一个计数,将指向new开辟的空间的指针个数保存下来,当计数不小于或不等于0时不进行析构对象,也不释放空间。直到计数为0时释放空间。大学生就业培训,高中生培训,在职人员转行培训,企业团训

String的所有赋值、拷贝构造操作,计数器都会 +1 ; string 对象析构时,如果计数器为 0 则释放内存空间,否则计数器 -1 。实现代码如下

大学生就业培训,高中生培训,在职人员转行培训,企业团训

 1 //引用计数方法  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