2013-06-01 35 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指针? –