Effective C++ 在资源管理类中提供对原始资源的访问
来源:互联网 发布:网络借贷是什么意思 编辑:程序博客网 时间:2024/06/05 08:42
前言
前面提到,我们使用栈对象来管理资源已达到对资源的正确回收,防止资源泄露的目的。有了资源管理类后,我们还需要再类里面提供对资源的访问方法,不然如果我们无法通过管理类来对资源进行访问,那我们还是会直接绕过管理类去直接访问资源,酱紫是不好的。
一般来说,资源管理类可以提供两种方式供外界去访问它所管理的资源:显式访问和隐式转换。
显式访问
所谓显示访问就是在管理类的内部提供某个函数,使得外界可以得到资源的指针。通过这个函数被命名为get()函数,当然为了方便,我们也可以重载*,->运算符。
假设有一类资源FontHandle 字体处理类:
FontHandle getHandle();得到字体资源void releaseFont(FontHandle fh);释放字体资源
有一个资源管理类:
class Font{public:Font(FontHandle fh):f(fh){}~Font(){releaseFont(f);}private:FontHandle f;};
我们加上get()函数:
class Font{public:Font(FontHandle fh):f(fh){}~Font(){releaseFont(f);}FontHandle get() const{ Return f;}private:FontHandle f;};
这样就可以访问里面的原始资源了。
隐式转换
假设资源管理类已经提供了显示访问的API,那么用户每次访问底层资源都需要显示地调用get()函数,这样既有好处也有不足。好处在于这种转换都是用户知晓的,由用户控制的,不会发生一些用户不愿意转换却转换的事情。不足在于,如果这类显示访问太于频繁将很影响管理类的便利性。
于是隐式转换就出现了,隐式转换提供一种自动将资源管理对象转换为原始资源指针的功能。这主要是通过重载 类型转换运算符实现的。
例如:
class Font{public:Font(FontHandle fh):f(fh){}~Font(){releaseFont(f);}FontHandle get() const{ Return f;}operator FontHandle() const{ Return f;}private:FontHandle f;};
这样在所有可以以FontHandle为参数的地方都可以填入Font对象了。
阅读全文
0 0
- 【Effective c++】条款15:在资源管理类中提供对原始资源的访问
- 《Effective C++》学习笔记条款15 在资源管理类中提供对原始资源的访问
- Effective C++(15) 在资源管理类中提供对原始资源的访问
- 读书笔记《Effective C++》条款15:在资源管理类中提供对原始资源的访问
- C++之在资源管理类中提供对原始资源的访问(15)---《Effective C++》
- Effective C++:条款15:在资源管理类提供对原始资源的访问
- Effective C++ 学记之15 在资源管理类中提供对原始资源的访问
- Effective C++ Item 15 在资源管理类中提供对原始资源的访问
- Effective C++读书笔记之十五:在资源管理类中提供对原始资源的访问
- effective c++在资源管理类中提供对原始资源的访问
- Effective C++ 在资源管理类中提供对原始资源的访问
- Effective C++ 条款15学习笔记:在资源管理类型中提供对原始资源的访问
- 《Effect C++》学习------条款15:在资源管理中提供对原始资源的访问
- 条款15: 在资源管理类中提供对原始资源的访问
- 条款15、在资源管理类中提供对原始资源的访问
- 条款15: 在资源管理类中提供对原始资源的访问
- item15: 在资源管理类中提供对原始资源的访问
- 条款15:在资源管理类中提供对原始资源的访问
- 进程的信号量和线程的信号量
- JavaScript HTML DOM详解
- 树莓派 安装QT5
- void的用法
- 微信开发(2):微信js sdk分享朋友圈,朋友,获取config接口注入权限验证(java)
- Effective C++ 在资源管理类中提供对原始资源的访问
- POJ 1035 Spell checker 查找单词
- 网络编程-网路七层协议图(2)之每一层对应的设备及功能(物理层、数据链路层、网络层、传输层、应用层...)
- (小工具)Java反射机制实现任意对象集合按指定任意字段进行分组通用程序实践
- 我们RN的路由导航Navigator使用攻略
- Matlab非线性方程求解
- 互联网大数据框架介绍(二)Hive,HBase
- Codeforces 327A Flipping Game(区间DP,暴力枚举)
- HashMap的工作原理