天天看点

《Effective C++》条款15、资源管理类提供原始资源的访问

显示转换

在我们的资源管理类中,有时我们需要使用到我们的原始类,所以我们需要在资源管理类中提供对原始资源的访问接口,在智能指针中,都提供了一个get()函数,这个函数使得我们能够获得智能指针内部封装的原始指针,同时智能指针也重载了*运算符和->运算符使得我们可以访问内部指针指向的资源。

如果我们在我们自己的资源管理类中也同样的封装了一个原始类,同样的,我们需要提供我们的原始资源,对于一个字体的管理类。我们同样可以提供一个get()函数返回我们的原始资源。

《Effective C++》条款15、资源管理类提供原始资源的访问

如果想要获得FontHandle类型的 f 对象,则我们写一个get函数返回 成员 f;

《Effective C++》条款15、资源管理类提供原始资源的访问

隐式函数转换

《Effective C++》条款15、资源管理类提供原始资源的访问

上述的隐式函数转换是一种函数语法格式,成员函数的一种,用于将本类型的函数转换成为其他类型,其中的operator相当于一个标志符,说明该是一个隐式函数转换。

operator 目标类型() {
    return 转换类型对象;
}
           

使用方式:

《Effective C++》条款15、资源管理类提供原始资源的访问

f表示获取调用隐式类型转换。

但是当采用隐式类型转换获取底层的值将会增加出错的几率。

《Effective C++》条款15、资源管理类提供原始资源的访问

这将导致两个对象管理同一资源,当其中一个对象将资源释放,则另一个资源将会悬空。

继续阅读