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的错误
答案 0 :(得分:3)
A
需要有一个虚拟析构函数;如果没有,则通过B
指针删除C
或A
对象会导致未定义的行为。未定义的行为可能包括内存泄漏。