#include <iostream>
using namespace std;
class base
{
public:
base(){cout << "base construct" << endl;}
virtual void print(){cout << "base print" << endl;}
~base(){cout << "base destruct" << endl;}
};
class derived: public base
{
public:
derived(){cout << "derived construct " << endl;}
void print(){cout << "derived print" << endl;}
~derived(){cout << "derived destruct" << endl;}
};
int main()
{
base *p = new derived();
delete p; // 派生类会进行析构 基类的析构非虚析构,所以不会执行基类的析构函数
return 0;
}
#include <iostream>
#include <memory>
using namespace std;
class base
{
public:
base(){cout << "base construct" << endl;}
virtual void print(){cout << "base print" << endl;}
~base(){cout << "base destruct" << endl;}
};
class derived: public base
{
public:
derived(){cout << "derived construct " << endl;}
void print(){cout << "derived print" << endl;}
~derived(){cout << "derived destruct" << endl;}
};
int main()
{
// 派生类会进行析构 虽然基类的析构非虚析构,但是也会执行基类的析构函数
shared_ptr<base> ptr(new derived());
return 0;
}