2013-06-01 33 views
1

我有這個循環遍歷一個向量。 然後它檢查給定的名稱是否等於模型的名稱。我的代碼會導致內存泄漏嗎?

最後,它創建一個指針並返回它。現在我的問題是,如果我不刪除指針,是否會有任何內存泄漏?

Model3D* ModelMemory::GetModel(char* name) 
{ 
    for (std::vector<Model3D*>::reverse_iterator it = mModels->rbegin();it != mModel->rend();it++) 
    { 
     Model3D *model = *it; 
     if (model->GetName() == name) 
     { 
      return model; 
     } 
    } 
} 

感謝您的幫助!

- 編輯 -

所以在這裏我的目標是存儲我所有的3D模型(存儲在的Model3D班)在一個載體, 這樣我可以在以後使用的Model3D的名稱檢索。 有沒有更好的方法來做到這一點?因爲它看起來像我的方式是不是很好的編程...

+0

我想這將是不正確的 - 你爲什麼比較指針? – Elazar

+0

如果GetName()返回一個對char *(比如說std :: string)實現==的對象,它可能是正確的。 –

+0

我將所有模型存儲在一個向量中,當我想要檢索它們時,通過名稱來記住它們會更容易。 難道還有更好的辦法嗎? –

回答

1

您不是動態分配任何內存。這是靜態分配

Model3D *model = *it; 

並且當此變量的上下文塊結束時(即從此方法返回時)它將被銷燬。它只是靜態分配的指針。

動態分配是使用new運算符完成的,沒有任何分配。

檢查泄漏的簡單規則是每newdelete

您可以使用valgrind終端工具檢查內存泄漏。

+0

它將一個_pointer value_分配給一個具有_automatic storage duration_的變量。這與_靜態存儲duration_是不同的,靜態分配** _可以被解釋爲。 –

+0

當上下文塊結束時,指針將不被**刪除。它將被**銷燬,就像任何其他變量一樣;但指針的析構函數什麼都不做。 –

+0

我不是指刪除指針的被引用對象的刪除。摧毀聲音更好,謝謝你,編輯。 – bartimar

3

不,不會是內存泄漏,當然,如果你以後刪除所有模型。此外,使用strcmp()來比較兩個字符串

+2

或者將名稱作爲引用常量的'std :: string' –

+0

因此,不會刪除一個指針嗎? –

+0

Model3D指針? –