定义时看的是等号右边的,析构时看的是等号左边的(析构函数不是虚函数时)
#include <bits/stdc++.h>
using namespace std;
#define MAXX 10005
#define MODD 1000000007
#define LL long long
#define mem(a, b) memset(a, b, sizeof(a));
class A
{
public:
A() { cout << "A" << endl; }
~A() { cout<<"~A"<<endl; }
};
class B:public A
{
public:
B()
{
cout << "B" << endl;
}
~B()
{
cout<<"~B"<<endl;
}
};
int main(void)
{
A *pa = (A*)new B();
cout << "YES" << endl;
B *pb = (B*)new A();
delete pa;
cout << "YES" << endl;
delete pb;
A *pca = new A();
cout << "YES" << endl;
B *pcb = new B();
delete pca;
cout << "YES" << endl;
delete pcb;
return 0;
}

#include <bits/stdc++.h>
using namespace std;
#define MAXX 10005
#define MODD 1000000007
#define LL long long
#define mem(a, b) memset(a, b, sizeof(a));
static int ss = 0;
class A
{
public:
static int s ;
A() { cout << "A" << endl; }
virtual ~A() { cout<<"~A"<<endl; }
};
class B:public A
{
public:
B()
{
cout << "B" << endl;
}
virtual ~B()
{
cout<<"~B"<<endl;
}
};
int A::s = 5;
int main(void)
{
A *pa = (A*)new B();
cout << "YES" << endl;
B *pb = (B*)new A();
// cout << A::s << endl;
cout << pa->s << endl;
delete pa;
cout << "YES" << endl;
delete pb;
A *pca = new A();
cout << "YES" << endl;
B *pcb = new B();
delete pca;
cout << "YES" << endl;
delete pcb;
return 0;
}

本文探讨了 C++ 中的继承与析构函数的调用顺序,通过实例展示了当基类的析构函数为虚函数时,派生类的析构函数能够被正确调用的过程。同时,对比了非虚析构函数情况下,析构函数调用的差异。

685

被折叠的 条评论
为什么被折叠?



