0

我正在使用 Allegro 5 框架。当我需要创建一个事件队列时,我必须调用“al_create_event_queue”并检查错误,并销毁它“al_destroy_event_queue”。因为它是我必须为要创建的每个对象使用的相同机制,所以它很无聊。

我的问题是:有一种方法可以将结构“移植”到类中,以便 my_event_queue 的构造函数实际上调用“al_create_event_queue”而析构函数调用“al_destroy_event_queue”?如果不是,我如何跟踪这些函数创建的对象,以便在我的“游戏”主处理程序类被破坏时自动删除它们?

4

2 回答 2

1

是的。你完全按照你说的去做。您似乎已经为自己解决了这个问题。

但是,您需要确保正确处理复制。您应该禁止复制此对象(通过 boost::noncopyable 之类的方法),或者您应该为它编写一个复制构造函数和复制赋值运算符。现在,Allegro 事件队列是不可复制的(没有 Allegro 功能),所以你应该禁止复制。

如果您可以访问 C++0x,则可以使用移动构造函数和移动赋值运算符。

于 2011-06-27T22:22:35.587 回答
0

当然你可以……简单的把创建结构的代码放在构造函数里,把删除它的代码放在析构函数里。

struct MyQueue {
  MyQueue() : queue(al_create_event_queue() { }
  ~MyQueue() { al_destroy_event_queue(queue); }

  ALLEGRO_EVENT_QUEUE* queue;

private:
  MyQueue(const MyQueue&);
  MyQueue& operator =(MyQueue);
};

请注意,你不能做太多来包装这些类型......你在 Allegro 代码中传递了太多的指针,以至于你基本上必须将底层queue对象暴露给世界。

于 2011-06-27T22:28:29.427 回答