概念我就不说了
直接上代码,有详细的注释
#define _CRT_SECURE_NO_WARNINGS //不加这个编译器报strcpy的错 不知道为什么,
#include <iostream>
using namespace std;
class A
{
public:
A()
{
p = new char[20];
printf("A()\n");
}
virtual ~A()//虚析构函数不存在下面的结果
/*通过父类指针,把所有的子类对象的析构函数都执行了一遍
通过父类指针,释放所有子类资源
*/
{
delete[] p;
printf("~A()\n");
}
private:
char *p;
};
class B:public A
{
public:
B()
{
p = new char[20];
strcpy(p,"objb");
printf("B()\n");
}
~B ()
{
delete[] p;
printf("~B()\n");
}
private:
char *p;
};
class C:public B
{
public:
C()
{
p = new char[20];
strcpy(p, "objc");
printf("C()\n");
}
~C()
{
delete[] p;
printf("~C()\n");
}
private:
char *p;
};
void hometodelete(A *base)//只执行了父类的析构函数 会造成内存泄漏
{
delete base;//这句话不会表现成多态 按类型执行A类的 没有多态的形式
}
int main()
{
C *myC = new C;
hometodelete(myC);
return 0;
}