关闭

智能指针的其他几个问题(2/2)

518人阅读 评论(0) 收藏 举报

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构造、析构函数里做正确的事情就可以了。

加锁指针对象本身要考虑不同指针策略,引用计数和引用链表有不少的区别,但是你总可以。

在这里,侵入式方案又一次展示了它的优势。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:181219次
    • 积分:2934
    • 等级:
    • 排名:第12586名
    • 原创:113篇
    • 转载:3篇
    • 译文:0篇
    • 评论:28条
    文章分类