お久しぶりです
今C++とDXライブラリで制作中のゲームで描画関係だけをクラス配列でまとめて管理したいです
具体的にいうと・・・
std::vector<Draw> draw;
draw.push_back(new DrawLine());
といった感じです
Drawは描画関係の抽象クラスで更新、描画クラスのみ定義しています
DrawLineはDrawクラスを継承し、直線を描画するという描画メソッドを定義し、vectorに追加します
タスクシステムのまねごとのような感じです
ちなみに上を実装しようとした場合Drawクラスを定義し、vectorを作った時点で「抽象クラスはインスタンス化できません」というコンパイルエラーがでてしまいます
上を実装しようとした場合、どのようにすればいいのでしょうか
vectorにこだわっているわけではないですが描画するだけなのでタスクシステムほど大掛かりでなくてもいいのでお願いします
抽象クラスをvectorにいれたい
Re:抽象クラスをvectorにいれたい
×std::vector<Draw> draw;
○std::vector<Draw*> draw;
追加、削除の頻度が高いならばvectorよりlistを使用することを推奨します。
○std::vector<Draw*> draw;
追加、削除の頻度が高いならばvectorよりlistを使用することを推奨します。
Re:抽象クラスをvectorにいれたい
色々な提案ありがとうございます
ただちょっと急ぎで作っており検討している時間がなく、頻繁に追加・削除を行うゲームではないので今回はshared_ptrは見送らせていただきます
次回はshared_ptrを考え、作ってみたいと思います
ただちょっと急ぎで作っており検討している時間がなく、頻繁に追加・削除を行うゲームではないので今回はshared_ptrは見送らせていただきます
次回はshared_ptrを考え、作ってみたいと思います
Re:抽象クラスをvectorにいれたい
> 頻繁に追加・削除を行うゲームではないので今回はshared_ptrは見送らせていただきます
頻繁に追加・削除を行う場合は std::listを使うべきであって、shared_ptrは関係ありません。
shared_ptrを使うと、明示的にdeleteしなくても勝手にやってくれるので、メモリ管理(というかオブジェクト管理)が非常に楽になります。
std::vector<Draw*>を使うと、vectorが解体される前に、全メンバに対してdeleteを行わなければなりません。
頻繁に追加・削除を行う場合は std::listを使うべきであって、shared_ptrは関係ありません。
shared_ptrを使うと、明示的にdeleteしなくても勝手にやってくれるので、メモリ管理(というかオブジェクト管理)が非常に楽になります。
std::vector<Draw*>を使うと、vectorが解体される前に、全メンバに対してdeleteを行わなければなりません。