1 #include <iostream>
2 using namespace std;
3
4 class Base
5 {
6 public:
7 Base( void )
8 {
9 cout << "Base::Base( )" << endl;
10 }
11
12 virtual void kkk()
13 {
14 cout << " kkk base." << endl;
15 }
16
17 virtual ~Base( void ) //基类没有虚析构函数时
18 {
19 cout << "Base::~Base( )" << endl;
20 }
21 };
22
23 class Derived : public Base
24 {
25 public:
26 Derived( void )
27 {
28 m_pData = new int;
29 cout << "Derived::Derived( )" << endl;
30 }
31
32 virtual void kkk()
33 {
34 cout << " kkk Derived." << endl;
35 }
36
37 virtual ~Derived( void )
38 {
39 delete m_pData;
40 m_pData = NULL;
41 cout << "Derived::~Derived( )" << endl;
42 }
43
44 int cc;
45 private:
46 int* m_pData;
47 };
48
49 int main( void )
50 {
51 Base bo;
52 Derived* pD = new Derived;
53
54 Base* pB = pD;
55
56 //通过基类的指针去删除派生类的对象,而基类又没有虚析构函数时,结果将是不可确定的。
57 //(此处是派生类的析构函数没有被调用。)
58
59 pB->kkk(); //child
60
61 Base &ba = *pD;
62 ba.kkk(); //child
64
65 Base bb = *pD; //object truncate
66 bb.kkk(); //base
67
70 delete pB; //undefined
71 pB = NULL;
72
73 system( "PAUSE" );
74 return EXIT_SUCCESS;
75 }