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 に答える