C++ 指向对象的指针向量-如何避免内存泄漏?

C++ 指向对象的指针向量-如何避免内存泄漏?,c++,memory-leaks,vector,observer-pattern,C++,Memory Leaks,Vector,Observer Pattern,我们通常如何处理其元素是指向对象的指针的向量?我的具体问题是下面提供的代码末尾的注释。谢谢 class A { public: virtual int play() = 0 ; }; class B : public A { public: int play() {cout << "play in B " << endl;}; }; class C : public A { public: int play() {cout << "play

我们通常如何处理其元素是指向对象的指针的向量?我的具体问题是下面提供的代码末尾的注释。谢谢

class A
{
 public:
 virtual int play() = 0 ; 
};

class B : public A 
{
public:
 int play() {cout << "play in B " << endl;};

};

class C : public A 
{
public:
 int play() {cout << "play in C " << endl;};

};


int main()
{

    vector<A *> l;
    l.push_back(new B());
    l.push_back(new C());

    for(int i = 0 ; i < l.size();i++)
    {
            l[i]->play();
    }

    //Do i have to do this to avoid memory leak? It is akward. Any better way to do this? 
    for(int i = 0 ; i < l.size();i++)
    {
            delete l[i];
    }

  }

使用共享的ptr数组或类似的智能指针。请注意,基类必须有一个虚拟析构函数,此代码才能正常工作。

最好的方法是使用智能指针来避免这种情况。但是如果您需要原始指针,我相信这是一种方法。

是的,您必须这样做以避免内存泄漏。更好的方法是创建一个共享指针向量,C++TR1,C++0x

 std::vector<std::tr1::shared_ptr<A> > l;
或唯一指针的向量C++0x,如果对象实际上未在此容器和其他对象之间共享

 std::vector<std::unique_ptr<A>> l;
或者使用boost


PS:别忘了@Neil Butterworth的虚拟析构函数

大家好,我正在使用VS2010,它可能已经共享了\u ptr。有没有一个例子我可以看一下-thx@q0987MSDN是一个很好的起点,在您的情况下:
  boost::ptr_vector<A> l;