我正在製作一箇中級/高級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;
}
我目前使用雙端隊列(最近從使用媒介改變),但我看到在內存中沒有差異用法。我雖然從「評論中發現了測試「這些產卵函數是我的內存泄漏的原因。由於這是創建/產生實例的錯誤方式,我想知道是否有更好的方法來存儲這些對象。
tl; dr:什麼是一些更好的對象來存儲非恆定數量的對象,以及如何?
使用智能指針並忘記內存泄漏。 – ForEveR
「當你需要一個(非平凡的)拷貝構造函數,拷貝賦值操作符或析構函數時,你很可能也需要實現其他的」 – 9dan
「@ 9dan指的是[三條規則]( http://en.wikipedia.org/wiki/Rule_of_three_%28C%2B%2B_programming%29)。 –