C RAII问题

所以正如我所理解的那样,正确地实现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是引用计数正确的,所以如果你想在某个地方创建它,并且“促销”它可以在更长的时间内生活,你可以通过将它复制到死亡之前的较长时间内来实现.

相关文章

对象的传值与返回说起函数,就不免要谈谈函数的参数和返回值...
从实现装饰者模式中思考C++指针和引用的选择最近在看...
关于vtordisp知多少?我相信不少人看到这篇文章,多半是来自...
那些陌生的C++关键字学过程序语言的人相信对关键字并...
命令行下的树形打印最近在处理代码分析问题时,需要将代码的...
虚函数与虚继承寻踪封装、继承、多态是面向对象语言的三大特...