美文网首页
Effective c++学习笔记 (item15)

Effective c++学习笔记 (item15)

作者: 懒生活 | 来源:发表于2022-08-23 22:30 被阅读0次

让资源管理类提供原始资源指针的访问接口

理想情况下,所有资源相关的操作全部通过资源管理类来进行,非必要不要暴露原始资源的指针。但是对于一些已经存在的老接口,他的入参要求是个资源指针,这种情况下为了适配它,就不嘚不提供一个获取资源指针的接口。之前提到过。尽量用auto_ptr 和shared_ptr来维护资源。有两种方式来实现资源管理类与其包含资源指针的转换。一种是显示转换,一种是隐式转换。

显示转换

auto_ptr shared_ptr 都提供了get成员函数用于返回原始资源指针。

举个例子:


void myDeleteSrc(char* pSrc)

{

    delete[] pSrc;

}

std::shared_ptr<char> createRes()

{

    std::shared_ptr<char> ret (new char[1024],myDeleteSrc);

    return ret;

}

void setSrc(char* pSrc)

{

    pSrc[0] = 'a';

}

int main()

{

    auto pSrc = createRes();

    setSrc(pSrc.get());

}

在这个例子中为了兼容老接口setSrc(), 就不得不掉用资源管理类的get函数来获取原始资源指针。

隐式转换

智能指针类并没有提供隐式转换的能力。比如下面的代码,在编译期间就会报错. 因为智能指针对象pSrc不能自动转换成char*类型。


void setSrc(char* pSrcChar);

std::shared_ptr<char> pSrc(new char);

setSrc(pSrc);

如果需要资源管理类能够支持隐式转换,那么还需要编写隐式转换相关的代码。隐式转换的实现用(item15)的扩展章节说明.

相关文章

网友评论

      本文标题:Effective c++学习笔记 (item15)

      本文链接:https://www.haomeiwen.com/subject/lxcngrtx.html