C++ RAII问题

Jos*_*osh 10 c++ windows raii

因此,我理解它正确实现RAII,如果我在哪里调用CreateFont,我将它包装CreateFont在构造函数和DeleteObject析构函数中的类中,所以当它超出范围时它会清理它.

第一个问题是,我最终会不会有大量的课程吗?特别是因为类只有构造函数和析构函数.

第二个问题是,如果我在WndProc中调用CreateFont类,那么它会不断超出范围.我应该在WndMain 做我所有的电话CreateFont或喜欢LoadBitmap吗?我习惯于调用这些功能WM_CREATE并清理它们WM_DESTROY.

Fle*_*exo 10

通过使用模板来帮助您,您可以避免大量重复工作.例如,如果您使用,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));
}
Run Code Online (Sandbox Code Playgroud)

这样可以节省您编写自定义类来管理资源的过程.如果你没有使用boost TR1或更新版本,你仍然可以自己实现类似和通用的东西来提供帮助.

boost::shared_ptr 是正确的引用计数,所以如果你想在某个地方创建它并"促进"它以后活得更久你可以通过将它复制到它死亡之前的某个地方来实现.