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

时间:2015-12-16 06:55:44

标签: c++ memory

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变量。

请告诉我这是否正确。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

使用此方法可以绕过使用vector获得的大部分好处。通过delete删除元素时(在您描述的情况下有效),您将使用无效数据指针将fooVector与某些未声明/无效的内存区域擦除。

如果您向我们展示了您实际创建fooVector元素的方式,那将会很方便。

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