抽象クラスをvectorにいれたい

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ジャーニー

抽象クラスをvectorにいれたい

#1

投稿記事 by ジャーニー » 15年前

お久しぶりです
今C++とDXライブラリで制作中のゲームで描画関係だけをクラス配列でまとめて管理したいです
具体的にいうと・・・

std::vector<Draw> draw;
draw.push_back(new DrawLine());
といった感じです
Drawは描画関係の抽象クラスで更新、描画クラスのみ定義しています
DrawLineはDrawクラスを継承し、直線を描画するという描画メソッドを定義し、vectorに追加します
タスクシステムのまねごとのような感じです

ちなみに上を実装しようとした場合Drawクラスを定義し、vectorを作った時点で「抽象クラスはインスタンス化できません」というコンパイルエラーがでてしまいます
上を実装しようとした場合、どのようにすればいいのでしょうか
vectorにこだわっているわけではないですが描画するだけなのでタスクシステムほど大掛かりでなくてもいいのでお願いします

GPGA

Re:抽象クラスをvectorにいれたい

#2

投稿記事 by GPGA » 15年前

×std::vector<Draw> draw;
○std::vector<Draw*> draw;

追加、削除の頻度が高いならばvectorよりlistを使用することを推奨します。

ジャーニー

Re:抽象クラスをvectorにいれたい

#3

投稿記事 by ジャーニー » 15年前

早速のご返事ありがとうございます
listを使うことも考え実装していきます
ありがとうございました

たかぎ

Re:抽象クラスをvectorにいれたい

#4

投稿記事 by たかぎ » 15年前

ポインタにするのが本来のやり方ですが、最近の処理系はshared_ptrを使えることも多いので検討してみてもよいでしょう。

ジャーニー

Re:抽象クラスをvectorにいれたい

#5

投稿記事 by ジャーニー » 15年前

色々な提案ありがとうございます
ただちょっと急ぎで作っており検討している時間がなく、頻繁に追加・削除を行うゲームではないので今回はshared_ptrは見送らせていただきます
次回はshared_ptrを考え、作ってみたいと思います

たかぎ

Re:抽象クラスをvectorにいれたい

#6

投稿記事 by たかぎ » 15年前

> 頻繁に追加・削除を行うゲームではないので今回はshared_ptrは見送らせていただきます

頻繁に追加・削除を行う場合は std::listを使うべきであって、shared_ptrは関係ありません。
shared_ptrを使うと、明示的にdeleteしなくても勝手にやってくれるので、メモリ管理(というかオブジェクト管理)が非常に楽になります。
std::vector<Draw*>を使うと、vectorが解体される前に、全メンバに対してdeleteを行わなければなりません。

ジャーニー

Re:抽象クラスをvectorにいれたい

#7

投稿記事 by ジャーニー » 15年前

>たかぎさん

メモリ管理が楽になるということですね。
一度調べてみて、すぐに使えるようなら考えてみます。

閉鎖

“C言語何でも質問掲示板” へ戻る