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++中都是有效的,但它们会导致难以依赖的结果和向量中的垃圾。