C++ 我的代码会导致内存泄漏吗?

C++ 我的代码会导致内存泄漏吗?,c++,pointers,memory,memory-leaks,C++,Pointers,Memory,Memory Leaks,我有一个for循环,它遍历一个向量。 然后检查给定的名称是否等于模型的名称 最后,它创建一个指针并返回它。现在我的问题是,如果我不删除指针,是否会有内存泄漏 Model3D* ModelMemory::GetModel(char* name) { for (std::vector<Model3D*>::reverse_iterator it = mModels->rbegin();it != mModel->rend();it++) { Mo

我有一个for循环,它遍历一个向量。 然后检查给定的名称是否等于模型的名称

最后,它创建一个指针并返回它。现在我的问题是,如果我不删除指针,是否会有内存泄漏

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;
        }
    }
}
Model3D*ModelMemory::GetModel(char*name)
{
对于(std::vector::reverse_迭代器it=mModels->rbegin();it!=mModel->rend();it++)
{
Model3D*model=*it;
if(model->GetName()==name)
{
收益模型;
}
}
}
谢谢你的帮助

--编辑--

所以我的目标是将所有3d模型(存储在Model3D类中)存储在一个向量中, 这样我以后可以使用Model3D的名称检索它。
有没有更好的办法?因为我的方式似乎不是很好的编程…

不,如果以后删除所有型号,当然不会出现内存泄漏。另外,使用strcmp()比较两个字符串

否,如果以后删除所有型号,当然不会出现内存泄漏。另外,使用strcmp()比较两个字符串

您没有动态分配任何内存。这是静态分配

Model3D *model = *it;
当这个变量的上下文块结束时(即,当您从这个方法返回时),它将被销毁。它只是静态分配的指针

动态分配是通过
new
操作符完成的,没有任何操作

检查泄漏的简单规则是对每个
新的
进行
删除


您可以使用
valgrind
终端工具检查内存泄漏。

您没有动态分配任何内存。这是静态分配

Model3D *model = *it;
当这个变量的上下文块结束时(即,当您从这个方法返回时),它将被销毁。它只是静态分配的指针

动态分配是通过
new
操作符完成的,没有任何操作

检查泄漏的简单规则是对每个
新的
进行
删除


你可以用
valgrind
terminal工具检查内存泄漏。

我想这是不正确的-为什么要比较指针?如果GetName()返回一个实现==for char*(比如std::string)的对象,它可能是正确的。我将所有模型存储在一个向量中,当我想要检索它们时,名字更容易记住。有没有更好的方法?使用某种映射,比如std::unordered\u映射。它将为您提供一种通过名称访问模型的直接方式。@MatthieuRouget
std::unordered\u map
将是一个更好的选择。我想这完全是不正确的-为什么要比较指针?如果GetName()返回一个实现==for char*(比如std::string)的对象,它可能是正确的。我把所有的模型都存储在一个向量中,当我想检索它们时,通过名字更容易记住它们。有没有更好的方法?使用某种映射,比如std::unordered\u映射。它将为您提供一种通过其名称直接访问您的模型的方法。@MatthieuRouget
std::unordered\u map
将是一个更好的选择。或者将该名称作为常量
std::string
@wouterstandaret的引用,只要它没有被删除,您就可以了。我建议您切换到使用智能指针,以避免在对象被删除后访问该对象的可能性,否则您将面临未定义行为的风险。或者将该名称作为常量
std::string
@wouterstandaret的引用,只要它未被删除,您就可以了。我建议您切换到使用智能指针,以避免在删除对象后访问该对象的可能性,否则您将面临未定义行为的风险。这是将指针值分配给具有自动存储持续时间的变量。这与静态存储持续时间不同,静态分配可以解释为静态存储持续时间。当上下文块结束时,指针不会被删除。它将被摧毁,就像任何其他变量一样;但是指针的析构函数什么也不做,我并不是说删除就是删除指针的引用对象。Destroy听起来更好,谢谢,已编辑。它将指针值指定给具有自动存储持续时间的变量。这与静态存储持续时间不同,静态分配可以解释为静态存储持续时间。当上下文块结束时,指针不会被删除。它将被摧毁,就像任何其他变量一样;但是指针的析构函数什么也不做,我并不是说删除就是删除指针的引用对象。销毁听起来更好,谢谢,编辑。