美文网首页
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