原文:http://blog.sina.com.cn/s/blog_71b5e2520100qxhu.html
在webkit中经常会看到类似于如下的代码:
该段代码的作用是,隐式布尔类型转换,即当RefPtr在条件表达式中求值时,依赖于其成员m_ptr是否为空。下面来分析一下这两行代码:
第1行,利用typdef定义了UnspecifiedBoolType类型,该类型是一个指向成员的指针类型。在这里它指向RefPtr的成员,该成员的类型为T*。
第2行,是个用户自定义转换函数,将RefPtr类类型转换为UnspecifiedBoolType类型,其转换意义是,返回RefPtr::m_ptr的地址。
这里利用指向成员的指针,一方面,如代码中的注释所言,避免了隐式转换为其他整型类型;另一方面,指向成员的指针不能隐式或显示转换为常规的指针类型,所以避免了如下问题:
RefPtr<SomeType> s;
delete s;
相关资料:
1.《Imperfect C++》第24章对operator bool()有详细介绍