#include <iostream> #include <string.h> using namespace std; class String { char* m_data; public: String(const char* p = NULL) { if(p == NULL) { m_data = ]; *m_data = '\0'; } else { m_data = ]; strcpy(m_data, p); } } String(const String &…
#include<iostream>using namespace std; class String;ostream& operator<<(ostream &out, const String&s);//引用计数器类class String_rep  {    friend class String;    friend ostream& operator<<(ostream &out, const String&s)…
1.概念 Scott Meyers在<More Effective C++>中举了个例子,不知你是否还记得?在你还在上学的时候,你的父母要你不要看电视,而去复习功课,于是你把自己关在房间里,做出一副正在复习功课的 样子,其实你在干着别的诸如给班上的某位女生写情书之类的事,而一旦你的父母出来在你房间要检查你是否在复习时,你才真正捡起课本看书.这就是“拖延战 术”,直到你非要做的时候才去做. 当然,这种事情在现实生活中时往往会出事,但其在编程世界中摇身一变,就成为了最有用的技术,正如 C++中的可…
本文写于2017-01-18,从老账号迁移到本账号,原文地址:https://www.cnblogs.com/huangweiyang/p/6295420.html 这算是我开始复习的内容吧,关于string类半年前写过,最近拿出来溜溜,以免面试被问到结果自己忘了.我之前的博客地址:C++引用计数思想--利用引用计数器自定义String类. 首先上一个string类最简明的写法,没有用到引用计数和COW,不过写法实在是很简单,不容易出错.先看代码,然后说弊端. #include <iostrea…
在实际开发过程中,C++string类使用起来有很多不方便的地方,笔者根据根据这些不足简单的扩展了这个类,如增加与数字之间的相互转化和格式化字符串.不足的地方望指正.读者也可以根据自己需求继续扩展. 头文件:exstring.h /* Author: wuqiang Email:  debugroot@126.com Description:exstring is a subclass of basic_string.It is added some userful operations,suc…
需求 实现一个String类 自己写的String headers/String.h #ifndef __MYSTRING__ #define __MYSTRING__ #include <string.h> class String { public: // 构造函数 String(const char* c_str = 0); // 拷贝构造函数 String(const String& str); // 析构函数 ~String(); // 赋值函数 String& op…
1.String类注释说明 /** * The {@code String} class represents character strings. All * string literals in Java programs, such as {@code "abc"}, are * implemented as instances of this class. * <p> * Strings are constant; their values cannot be ch…
由于释放内存空间,开辟内存空间时花费时间,因此,在我们在不需要写,只是读的时候就可以不用新开辟内存空间,就用浅拷贝的方式创建对象,当我们需要写的时候才去新开辟内存空间.这种方法就是写时拷贝.这也是一种解决由于浅拷贝使多个对象共用一块内存地址,调用析构函数时导致一块内存被多次释放,导致程序奔溃的问题.这种方法同样需要用到引用计数:使用int *保存引用计数:采用所申请的4个字节空间. #include<iostream> #include<stdlib.h> using namesp…
1.引用计数 我们知道在C++中动态开辟空间时是用字符new和delete的.其中使用new test[N]方式开辟空间时实际上是开辟了(N*sizeof(test)+4)字节的空间.如图示其中保存N的值主要用于析构函数中析构对象的次数delete[] p时先取N(*((int*)p-1)).我们参照这种机制在实现String类的时候提供一个计数,将指向new开辟的空间的指针个数保存下来,当计数不小于或不等于0时不进行析构对象,也不释放空间.直到计数为0时释放空间. String的所有赋值.拷贝…
1.前言 最近看了下<C++Primer>,觉得受益匪浅.不过纸上得来终觉浅,觉知此事须躬行.今天看了类类型,书中简单实现了String类,自己以前也学过C++,不过说来惭愧,以前都是用C来写程序,学的C++基本都忘记了,也说明自己以前对C++的理解不够深入.基于这些,觉得有必要动手来写写C++的一些程序了,毕竟C++有很多的功能是C所不具备的.正好看了课本中String类的简单实现,而且string类在C++中的使用频率也很高,了解其内部的实现是很有必要的.所以今天打算写个string类,就…