欢迎光临散文网 会员登陆 & 注册

Effective C++ 第十五条 Provide access to raw resource in resource-ma

2023-01-16 15:46 作者:九思519  | 我要投稿

在资源管理类中提供对原始资源的访问

        在前面说过,我们要用资源管理类来实现资源管理,主要是为了在程序结束的时候能够释放资源不会导致内存泄漏。这意味着即使我们使用类封装了原始资源,但还是需要在类中设计 API 给用户调取原始资源,虽然用户不一定要使用,但开发者应当提供。

像这样就把资源 rhs 使用类 ptr 保护起来了,但是这还不够,因为在很多时候,用户需要调取资源 rhs,所以我们需要设计 API 给用户使用。考虑到用户需求,通常有以下几个问题:

1.用户使用的函数需要的参数以及返回值都是 T ,而封装在 ptr 中的资源类型变成了 ptr,原来的函数用不了了,所以要设计类型转换接口给用户,让用户通过 ptr 类型获得 T 类型的资源。 当前有如下情况

现在该如何通过 callInt 来使用 ptr 封装的 int* 作为参数呢?

显式转换

隐式转换

隐式转换看起来方便很多,但是也有其他问题,比如在客户需要 ptr 类型的时候,拷贝 ptr 结果得出来的是 T 。这里可能注意,类的类型 和 operator T* () 的类型可以不一样,比如类的类型是T,你可以在运算符重载那声明为 operator double* () const,这样不论创建 ptr 对象的时候给的是什么类型,都可以返回 double 型指针。

2.运算符重载 operator* 和 operator→

此时可以直接通过调用 ptr 来调用内部原始资源。


Effective C++ 第十五条 Provide access to raw resource in resource-ma的评论 (共 条)

分享到微博请遵守国家法律