所以正如我所理解的那样,正确地实现RAII,如果我在哪里调用CreateFont,我将它包装在一个类中,在构造函数中的CreateFont和析构函数中的DeleteObject,所以当它超出范围时,它会被清除.
第一个问题是,不会结束ALOT的类吗?特别是由于类只有一个构造函数和析构函数.
第二个问题是,如果我在WndProc中调用CreateFont类,那么它将不断地超出范围.所以我应该做所有的调用CreateFont或在WndMain中的LoadBitmap?
我习惯于在WM_CREATE中调用这些函数,并在WM_DESTROY中清理它们.
解决方法
您可以通过使用模板来帮助您避免大量重复工作.例如,如果您使用boost :: shared_ptr,您可以执行以下操作:
#include <boost/shared_ptr.hpp> #include <functional> struct Font; Font *createFont(); void deleteFont(Font*); int main() { boost::shared_ptr<Font> font(createFont(),std::ptr_fun(deleteFont)); }
这可以节省您编写一个自定义类来管理资源.如果boost和TR1或更高版本不可用,您仍然可以实现类似和通用的自己来协助.
boost :: shared_ptr是引用计数正确的,所以如果你想在某个地方创建它,并且“促销”它可以在更长的时间内生活,你可以通过将它复制到死亡之前的较长时间内来实现.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。