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

原创 2007年09月18日 11:13:00

1.Address-Of操作(取址) 

我们可以使用指向指针的指针,这需要对指针取址,我们很容易把同样的想法加在智能指针上,但是,使用智能指针的目的是管理指针,直接暴露给外界底层的指针一定不是什么好事,而且,定义了取址操作的类型几乎不可能被使用于范型编程。

从这个意义上来说,远离Address-Of操作是个不错的选择。

2.隐式转换(Implicit Conversion)至原始指针

被传递的隐式转换的指针同样超出了智能指针的管理范围,不可预料的事情一样可能发生。而且,一个极端的情况是用户delete智能指针操作的时候,因为隐式转换的存在,在智能指针管理范围之外已经被删除了指针,这是和设计使用智能指针的初衷背道而驰的。

仅仅为了避免delete,可以定义void*的转换,造成delete歧义。但是,这个问题的更好解决方案是使用显示方法获取底层指针(显示转换)。这样做的好处是,你要做超出智能指针管理权限的事情,但是,白纸黑字,你的代码保证这是你可以如此做的。

隐式转换和显示转换的历史也告诉我们,显示要安全一些。

3.相等性(Equality)和不等性(Inequality)

为了支持相等性和不等性的测试,传递成为底层指针的测试是个不错的想法,但是这样有各种各样的问题,暴力定义各个操作是个不错的选择,尽管复杂烦琐,但是这保证了程序正确的行为,这是值得的,而且我们还有template技术的支持,不会有太多的代码,试想一下LOKI_TYPELIST_50你就知道你没做多少工作了。

对每种判断情况定义判断操作函数,friend化保证可以访问到底层数据,是实现这些方法的手段。唯一一个无法解决的问题是if(sp)...测试,但是你可以使用if(!!sp)...替代。可以有手段支持到if(sp)...,但是不安全。

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

4.次序比较如果熟悉stl,你已经知道,对于所有比较而言,定义一个less操作符就够了。其他所有操作都可以通过less获得。对于smartpointer而言,你可以不支持次序比较操作(定义而不实现),...
  • win2ks
  • win2ks
  • 2007年09月18日 12:12
  • 521

C++几种智能指针之间的比较

这些智能指针在设计的时候,一个关键的问题就是所有权的控制。如果把指针所指向的对象比作电视机的话,那么指针就是观众。第一个人需要看电视的时候需要打开它,没人看的时候就要保证把电视关掉。 对于std...
  • nyist327
  • nyist327
  • 2015年05月21日 23:59
  • 1480

回复几个问题

上周末跟老朋友聚会,谈到技术的时候,有一个共识,软件开发方面真正有价值的进步,应当是有利于用户、有利于项目管理、有利于解决领域问题,而不是有利于程序员。多年以来,主流语言和系统的很多改进,其目的都是为...
  • myan
  • myan
  • 2010年09月14日 22:41
  • 36309

为什么要用C++智能指针

对于C/C++程序员来说,指针是天堂,同时指针也是地狱。指针有多少好处,又有多少让人头疼的问题我们这里就不多说了。但为了局部解决指针的问题,我们提出了智能指针这个概念。   实际上,我一直不明白,...
  • u011676589
  • u011676589
  • 2013年08月20日 08:24
  • 684

智能指针(smart pointer)

智能指针(smart pointer)是一种抽象的数据类型(abstract data type)。 在程序设计中, 智能指针通常由类模板(class template), 借助模板达到泛型。 通常借...
  • a130737
  • a130737
  • 2015年03月23日 18:46
  • 1402

其他几个问题

1.在一个未排序的表中寻找第k小的数 需要部分排序 2.一个表中有正有负,寻找一个连续序列,使该序列的和最大或最小。 3.一个表中有奇数有偶数,将元素重新排列,使得奇数位置上都是奇数或者使得偶数...
  • Galaxy_Li
  • Galaxy_Li
  • 2012年03月09日 16:41
  • 374

【C++】智能指针之引用计数的实现

本文将简单的介绍,C++11中的智能指针的引用计数大致是如何实现的。部分内容节选自 C++ primer 5th。...
  • zone_programming
  • zone_programming
  • 2015年09月11日 15:16
  • 2985

OSG中引用计数与智能指针实现原理

OSG中的智能指针 智能指针对于C++程序员来说并不是一个陌生的东西,它在c++的内存管理中有着很广泛的应用(在最开始的时候,由于对智能指针不了解,还天真的以为智能指针就是osg的独创,想起来还正是...
  • wang15061955806
  • wang15061955806
  • 2016年06月30日 20:25
  • 1035

四种智能指针的用法和原理

智能指针共分为4种,即boost库中的auto_ptr、scoped_ptr、shared_ptr、weak_ptr。   智能指针的作用是管理一个指针,因为存在以下这种情况:申请的空间在函数结束时...
  • sinat_36118270
  • sinat_36118270
  • 2017年04月04日 13:06
  • 1216

智能指针探索(一)——成员变量的释放

#include #include #include #include using namespace std;class Engine { public: Engine() { n...
  • Sephiroth_Ace
  • Sephiroth_Ace
  • 2017年06月11日 16:11
  • 279
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:智能指针的其他几个问题(1/2)
举报原因:
原因补充:

(最多只允许输入30个字)