将SharedPtr与std :: list一起使用时内存泄漏!错误?

时间:2017-03-16 01:18:47

标签: c++ memory-leaks poco stdlist

VLD在以下代码中检测到内存泄漏:

typedef Poco::SharedPtr<double> DoublePtr;
class A {
    public:
        DoublePtr a;
};

class B:public A {
    public:
        DoublePtr b;
};    

class C : public B
{
    public:
        DoublePtr c;

};

typedef Poco::SharedPtr<A> APtr;
typedef Poco::SharedPtr<B> BPtr;
typedef Poco::SharedPtr<C> CPtr;

class Test {
    public:
        Test() {
            CPtr c1 = new C();
            a_list.push_back(c1);
        }

        std::list<APtr> a_list;
};

int main(int argc, char *argv[])
{

    Test test;
}
  

但是使用std :: shared_ptr或boost :: shared_ptr时可以。   而且,如果我添加'virtual~A(){}',Poco :: SharedPtr也可以!

     

是Poco :: SharedPtr的错误

1 个答案:

答案 0 :(得分:3)

A需要有一个虚拟析构函数;如果没有,则通过B指针删除CA对象会导致未定义的行为。未定义的行为可能包括内存泄漏。