No, not necessarily. It all depends on how the classes are declared and what their lifetimes are.

In your example just remove the 'delete' line. The car object will be automatically destructed when the execution leaves 'main()'
Code:
int main()
{
	      CVehicle *m_VehicleType;
	      CCar m_Car;
	      m_VehicleType = &m_Car;
} << m_Car destroyed here.