在帮同学调 Qt 的程序的时候,发现了很好用的 QString
,和 MFC 的 CString
一样是对字符串的封装,提供了许多实用函数。不过 QString
给我感觉最实用的是自动的资源生命周期管理机制,而且很明显是基于引用计数的。由于新语言瘾又上来了,再加上想到了 TJS,我就想实现自己的用引用计数管理的类。原理很简单,不过由于我没有亲自写过,所以在实现的时候遇到了困难,幸好都分析解决了。
其实 C++ 新标准中有 std::shared_ptr<T>
类,但是我不喜欢 shared_ptr<int> p = new int[10];
这样强制要用指针的写法,而且每次都要带一个 shared_ptr
太费劲。如果我需要一个自动数据类(例如字符串),如下写法哪个更简单:
shared_ptr<String> pStr = new String(); // 写法1
String str; // 写法2
在用的时候,我关注的重点是 String
内的数据而不是 shared_ptr
的实现方式,所以 shared_ptr
能省就省。而且不是有人说过吗,要会用 Boost(shared_ptr
这个标准来自 Boost),更要理解它所使用的“奇技淫巧”的原理。所以为了掌握自主知识产权,还是有必要自己动手写一个引用计数管理的。