私は中級/上級のC++プログラム、正確にはビデオゲームを作成しています。
最近、かなりの量のメモリがリークされていることに気づき、インスタンスの作成方法に何か問題があるのではないかと考えていました。
以下は要約された(しかし元々は複雑な)クラスです:
class theObject
{
//Instance variables
//Instance functions
};
このオブジェクト(私が保存している他のオブジェクトと一緒に、私はのすべての異なるバリエーションテンプレートの配列インデックスを持っていますtheObject
。その部分は重要ではありませんが、私がそれらを保存する方法(または私の意見)は次のとおりです。
//NEWER VERSION WITH MORE INFO
void spawnTheObject()
{
theObject* NewObj=ObjectArray[N];
//I give the specific copy its individual parameters(such as its spawn location and few edited stats)
NewObj->giveCustomStats(int,int,int,int);//hard-coded, not actual params
NewObj->Spawn(float,float,float);
myStorage.push_back(new theObject(*NewObj));
}
//OLDER VERSION
void spawnTheObject()
{
//create a copy of the arrayed object
theObject* NewObj=new theObject(*ObjectArray[N]);
//spawn the object(in this case it could be a monster), and I am spawning multiple copies of them obviously
//then store into the storage object(currently a deque(originally a vector))
myStorage.push_back(new theObject(*NewObj));
//and delete the temporary one
delete NewObj;
}
現在、deque(最近、ベクトルの使用から変更されました)を使用していますが、メモリ使用量に違いは見られません。しかし、「コメントテスト」から、私が持っているこれらのスポーン関数がメモリリークの原因であることがわかりました。これはインスタンスを作成/生成するための間違った方法であるため、これらのオブジェクトを格納するためのより良い方法があるかどうか疑問に思いました。
tl; dr:一定量でないオブジェクトを格納するためのより良いオブジェクトとその方法を教えてください。