C++从函数中删除类变量


class Foo {
    // some codes
}
class Bar {
    // Constructor, Destructor
    vector<Foo*> fooVector;
    Foo* getFoo(long index)
    {
        return fooVector[index];
    }
    long addFoo(Foo* foo)
    {
        fooVector.push_back(foo);
        return fooVector.size() - 1;
    }
    void removeFoo(long index)
    {
        delete fooVector[index];
    }
}

这是我的代码。但我想改变removeFoo喜欢

void removeFoo(long index)
{
    Foo* foo = getFoo(index);
    delete foo;
}

对吗?我不能确定这一点。

在我看来,它可能会删除foo变量。

请告诉我它是否正确。

如果指针的内存是由new分配的,那么是的,这就是你释放它的方式。但是,这不会从矢量中删除指针,因此之后您的矢量将有一个不再指向有效内存的条目。您需要将其从矢量中删除。

另请注意,在现代C++中,除了多态性之外,很少需要使用指针。如果没有指针,则不必担心释放内存或杂散指针。

使用这种方法,您将绕过使用 vector 获得的大部分好处。当通过delete删除元素时(这在您描述的情况下是有效的(,您将使用指向某些未声明/无效内存区域的无效数据指针来破坏您的fooVector

此外,如果您向我们展示您如何实际创建fooVector元素,那将非常方便。

在我看来,您提出的两种方式在C++中都是有效的,但它们会导致难以依赖的结果和向量中的垃圾。

最新更新