【发布时间】:2015-07-18 04:32:26
【问题描述】:
我正在阅读 Scott Meyers 的 Effective C++,现在我在第 15 条,提供对资源管理类中原始资源的访问。这是一个例子:
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
};
他提议引入一个显式的转换成员函数来访问原始资源:
class Font {
public:
...
FontHandle get() const { return f; } // explicit conversion function
...
};
他是这样说的:
一些程序员可能会发现需要明确地请求这样的 转换令人反感,足以避免使用该类。在 反过来,会增加泄漏字体的机会,这正是 字体类旨在防止。
我不明白提供对原始资源的访问权限如何增加泄漏字体的机会?我们只是返回了指向资源对象的原始指针的副本。而且我们不应该担心访问通过get 成员函数获取的悬空指针,因为只有在超出范围时才会调用删除运算符。
我错过了什么?
【问题讨论】:
-
他是说不使用类会增加泄漏字体的机会。
-
“一些程序员可能......避免使用该类。这反过来又会增加泄漏的机会”
-
我投票决定将此问题作为离题结束,因为 OP 误读了问题文本
标签: c++ memory-leaks