more effective c++为智能指针添加计数(36)

作者使用结构体完成这一功能。为使用字符串添加引用计数。

看代码:++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class Stringg {
private:
//作者声明了一个结构体,来完成操作
struct StringValue {
int refCount;
char* data;
StringValue(const char * initValue);
~StringValue();
}
}
String::StringValue::StringValue(const char* initValue)
: refCont(1)
{
data = new char[strlen(initValue) + 1];
strcpy(data, initValue);
}
String::StringVlue::~StrinValue()
{
delete []data;
}
String::String(const char* initValue)
: value(new StringValue(initValue))
{\\它这里就创建对数据的跟踪}
//对于赋值和复制函数,就先判断是否自己,
//是否--value->refCount==0;delete.++refcount.
Stringg::~Stringg()
{if(--value->refCount == 0 ) delete value;}

最后:混蛋作者,最后还是封装了一个智能基类。
详细见199

分析:String需要StringValue模块来专门服务,相应功能String不管,只是知道初始化时构造它就好。然后String需要StringValue的一些结果,所以设计智能指针模块来访问数据,当然也可以修改数据。

如此关系,可以记录下。

// //