4.次序比较
如果熟悉stl,你已经知道,对于所有比较而言,定义一个less操作符就够了。其他所有操作都可以通过less获得。
对于smartpointer而言,你可以不支持次序比较操作(定义而不实现),也可以通过定义operator<支持排序比较。但是,可能你需要定义指针的operator<和T对象的operator<,一般情况,这两个不可少。
另外,指针有两个概念,iterator和moniker,iterator关心遍历,moniker关心替代对象本身。举个例子来说,vector关心二者,list关心前者。
5.检测及错误报告
如何报告,使用异常是个不错的选择,assert也是个选择,但终有一个报告办法。另外,对于lazy初始化的情况,你还可以在检测到特定情况的时候做特定处理。
如果拒绝空smartpointer,你可以在构造函数里检测(初始化检测)。如果检测monitor,那你要在使用的时候(operator->和unary operator*)进行对象的合法性检测(dereference前检测)。但是注意,后者这种检测可能成为性能瓶颈。
6.对轻量级vector的支持
vector设计的太完善了,肯定,这也要牺牲一定的效率,有的时候,我们只想得到一个可以动态扩张的数组,不需要其他任何保证。smartpointer可以提供帮助。
7.smartpointer和多线程
同样,这里你要遇到对象加锁和指针本身。
加锁对象比较简单,你在对象里定义锁操作,在smartpointer构造、析构函数里做正确的事情就可以了。
加锁指针对象本身要考虑不同指针策略,引用计数和引用链表有不少的区别,但是你总可以。
在这里,侵入式方案又一次展示了它的优势。