2015-12-16 66 views
-1
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]; 
    } 
} 

这是我的代码。 但我想改变removeFooC++从函数中删除类变量

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

是不是?我无法确定这一点。

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

请告诉我是否正确。

+1

你为什么不使用'vector ',有什么理由需要存储指针而不是实际的对象? – user657267

回答

2

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

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

1

使用这种方法,您绕过了使用vector所获得的大部分好处。当按照delete(这在您描述的情况下有效)删除元素时,您将用无效的数据指针将您的fooVector垃圾信息丢弃到某些未声明/无效的内存区域。

如果您另外向我们展示了您是如何创建fooVector元素的,那将会非常方便。

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