首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从RAII对象泄漏资源

从RAII对象泄漏资源
EN

Stack Overflow用户
提问于 2015-07-18 04:32:26
回答 1查看 83关注 0票数 0

我正在阅读Scott的有效C++,现在我正在讨论项目15,提供对资源管理类中原始资源的访问。下面是一个示例:

代码语言:javascript
复制
class Font { // RAII class
public:
    explicit Font(FontHandle fh) // acquire resource;
        : f(fh) // use pass-by-value, because the
    {} // C API does
    ~Font() { releaseFont(f ); } // release resource
    ... // handle copying (see Item14)
private:
    FontHandle f; // the raw font resource
};

他建议引入一个显式转换成员函数,用于访问原始资源:

代码语言:javascript
复制
class Font {
public:
    ...
    FontHandle get() const { return f; } // explicit conversion function
    ...
};

以下是他所说的话:

一些程序员可能会发现需要显式地请求这样的转换--这足以避免使用类。反过来,会增加字体泄漏的可能性,这正是字体类设计要防止的事情。

我不明白如何提供对原始资源的访问增加泄漏字体的机会?我们刚刚返回了指向资源对象的原始指针的副本。我们不应该担心访问使用get成员函数获得的悬空指针,因为只有当我们超出范围时才会调用delete操作符。

我错过了什么?

EN

回答 1

Stack Overflow用户

发布于 2015-07-18 11:52:18

想想看,如果您可以访问资源你可以复制它,摧毁它,重建它或者其他什么。所有这些都没有使用防止资源泄漏的类。如果您重新创建它,或者复制它,您就可以访问非托管资源,从而增加泄漏的风险。如果你销毁它,你可能会在你的代码中造成很大的混乱。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31487809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档