关于operator关键字那点事儿

C++中,operator 关键字的作用有两点:

1.操作符重载。

2.对象类型的隐式转换。


这两种作用都比较好理解。

下面主要介绍,利用“作用2”在解决 “Testing Smart Pointers for Nullness” 。 


为了实现  智能指针的 ptn == 0 || ptn!=0) || ptn || !ptn, 判断,需要将智能指针隐式转换成bool.

总结下,常见有4种实现方法:

  1. operator bool() {...} 
  2. operator const void*() {...}
  3. typedef T* (CLASS::*CLASSMEMFUNPT) ();    operator CLASSMEMFUNPT() {...}
  4. typedef T* CLASS::*CLASSMEM;                    operator CLASSMEM() {...}

方法1,bool类型会(轻易地)转化为int,long等类型。
方法2,void*  可以在外部被delete掉。
方法3,4 是boost里面普遍使用的方法。 相对较好。


下面给出一个boost风格的智能指针的代码片段

template<class T> class KinAutoPtr // noncopyable
{
private:
    T * px;

    KinAutoPtr(KinAutoPtr const &  );
    KinAutoPtr & operator=(KinAutoPtr const &);

    typedef KinAutoPtr<T> this_type;
public:
    typedef T element_type;
    typedef T * this_type::*unspecified_bool_type;

    explicit KinAutoPtr( T * p = 0 ): px( p ) // never throws
    {

    }

    operator unspecified_bool_type() const // never throws
    {
        //这里其实只要返回一个非0的this_type空间内的指针  
        return px == 0? 0: &this_type::px;
    }
};

另外,如果cpp文件里有多个隐式转换会如何呢?

在vc9上试验了下, 如果有operator unspecified_bool_type() 和 operator bool(),无论代码先后顺序,始终执行的是operator bool。


转载于:https://www.cnblogs.com/kinzhang/archive/2012/10/19/3048783.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值