C RAII问题

前端之家收集整理的这篇文章主要介绍了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&C++相关文章