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
变量。
请告诉我这是否正确。
答案 0 :(得分:2)
如果指针的内存是由new
分配的,那么是的,你是如何释放它的。但是,这不会从向量中删除指针,因此您的向量后面会有一个不再指向有效内存的条目。你需要从矢量中erase。
另请注意,在现代C ++中,除了多态之外,很少需要使用指针。如果你没有指针,你不必担心释放内存或迷路指针。
答案 1 :(得分:1)
使用此方法可以绕过使用vector
获得的大部分好处。通过delete
删除元素时(在您描述的情况下有效),您将使用无效数据指针将fooVector
与某些未声明/无效的内存区域擦除。
如果您向我们展示了您实际创建fooVector
元素的方式,那将会很方便。
在我看来,你提出的两种方式在C ++中都是有效的,但它们会导致难以依赖的结果和向量中的垃圾。