#include <iostream>
#include <stdio.h>
class A
{
public:
A() { printf("A\n"); }
~A() { printf("~A\n"); }//无法释放子类
//virtual ~A() { printf("~A\n"); } //可以释放子类指针
};
class B : public A
{
public:
B() { printf("B\n"); }
~B() { printf("~B\n"); }
};
int main()
{
A* p = new B;
delete p;
return 0;
}
如上,再使用qt智能指针的QSharedPointer时候,
要么使用
QSharedPointer<父类>(子类指针)
要么
QSharedPointer<子类>(子类指针)
必须包裹的是子类指针
如果使以下方式,则会造成内存泄漏
QSharedPointer<父类>(父类指针)
解决方法是父类实现虚析构函数即可.