Windows 7 Ultimate SP1 64bit
Visual C++ 2010
DXライブラリ
オブジェクトの確保の仕方について、今まではソフト起動時に一括確保していたのですが、
龍神録のソースを参考にしていたところ、オブジェクトが必要になった時にnewで確保し、必要なくなったらdeleteで解放(間違っていたらすみません)
していたので、効率としてはそのほうが良いのでしょうか?
メモリリークが怖いのでnewは避けていたのですが、
_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
というメモリリークの発生を確認できる関数があるのを知ってからnewを使ってみたくなったのが現状です。
私の考えとしては、
静的確保
・deleteしなくてもいいのでメモリリークを防げる
・起動時に大量のメモリ領域を確保するが、最近のPCは1GBくらい積んでることが多いから大丈夫?
・初期化のタイミングが分からないのがネック
・オブジェクトを配列で管理した場合、空きを探す手間がある
動的確保
・メモリリークのリスク
・コンストラクタを有効に活用できそう
・オブジェクトの空きを探す手間は無いが、動的に確保するときの処理時間はどうか?
・newによる動的確保は処理が遅いと聞いた事があります、STGのように1フレームが重要なゲームの場合どうか?
今はこんな感じです。
const int BULLET_MAX = 1000;
class C_Bullet; // 弾オブジェクトのクラス
class C_ObjBase{
private:
C_Bullet m_Obj[ BULLET_MAX ];
・・・・その他関数
};
const int BULLET_MAX = 1000;
class C_Bullet; // 弾オブジェクトのクラス
class C_ObjBase{
private:
std::list<*C_Bullet> m_Obj; // リストに追加したほうが効率的?
public:
void *CreateBullet(){
//最大数を越えてたらつくらない
if( m_Obj.size < BULLET_MAX ){
C_Bullet *bullet = new C_Bullet;
m_Obj.push_back( bullet );
}
else{
//オーバーフローをしらせる
・・・
}
}
・・・・その他関数
};
どちらがいい?・・・と聞いても人によって考え方は違うと思いますが、何かしら意見を下さると幸いです。
また、STGを作ってる方は「私は動的に確保してますよ」、「違う方法で確保してます」など、
どうやっているかを教えてくださると幸いです。