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

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值