This is the function that causes the problem.

Code:
Deck::~Deck()
{
	delete this;
}
I call the function in this function:
Code:
void Card_Game::cleanup()
{
	
	deck->~Deck(); // delete deck

	for (unsigned int loop = 0; loop < players.size(); loop++) // delete hands
	{
		players[loop].clear_hand();
	}

	players.clear(); //delete players
	
}
And I call cleanup here:

Code:
int Card_Game::main_menu(int result)
{
	switch(result)
	{
	case 1: // play blackjack
		cleanup(); // cleanup just in case
		initialize_players(2);
		deck = new Deck;
		deck->shuffle_deck();
		players[0].draw(*(deck), 1);
		players[1].draw(*(deck), 1);
		return 1;
	case 2: // quit game
		return 3;
	default:// invalid entry
		std::cout << "Please enter 1 or 2.\n";
		return 0;
	}
}
Basically the program freezes when I make it go to case 1. Any ideas why I can't do that?