Effective C++ Item 15 在资源管理类中提供对原始资源的访问

来源:互联网 发布:如何购买阿里云空间 编辑:程序博客网 时间:2024/06/06 02:22

本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie


经验:APIs往往要求访问原始资源,所以每一个RAII class应该提供一个“取得其所管理之资源”的办法。

对原始资源的访问可能经由显式转换或隐匿转换。一般而言显式转换比较安全,但隐式转换对客户比较方便。


FontHandle getFont();void releaseFont(FontHandle fh);class Font{public:explicit Font(FontHandle fh):f(fh){}//获得资源~Font(){releaseFont(f);}//释放资源private:FontHandle f;};

示例1:显式转换,如get

class Font{public://…FontHandle get() const {return f;}//显示转换函数//…}

示例2:隐式转换

class Font{public://…operator FontHandle() const //隐式转换函数{ return f; }//…}

#include<iostream>using namespace std; class A{public:A(int vv): v(vv){}int getValue(){return v;}private:int v;};class B{public:B(const A &aa): a(aa){}operator A(){return a;}private:A a;};void display(A a){cout << a.getValue() << endl;}int main(){A a(1);B b(a);display(b);system("pause");}

输出:

1

解析:

display函数对B类型的参数b调用operator A()进行隐式类型转换,然后再通过调用A的copy constructor构造参数a


0 0