#include <iostream>

using namespace std;

class LeakyBase{
public:
	~LeakyBase(){}
};

class PluggedBase{
public:
	virtual ~PluggedBase(){}
};

class LeakyDerived : public LeakyBase{
public:
	LeakyDerived() { cout << "LeakyDerived()" << endl; }
	~LeakyDerived() { cout << "~LeakyDerived()" << endl; }
};

class PluggedDerived : public PluggedBase{
public:
	PluggedDerived() { cout << "PublicDerived()" << endl; }
	~PluggedDerived() { cout << "~PluggedDerived()" << endl; }
};

int main()
{
	LeakyBase * l = new LeakyDerived;
	PluggedBase * p = new PluggedDerived;
	
	delete l;
	delete p;
}
