What exactly do you mean by "removing"? Removed as per SiCrane's suggestions or just removed it from your code?
If you do not supply one explicitly the compiler will generate one which might have similar problems depending on the situation.
I just removed it from my code and compiled generated constructors works just fine for me.
But as BitMaster said, the compiler generated copy constructor is as incorrect as the copy constructor you originally had. It doesn't work. Your class simply isn't set up for handling the ownership of the pointer, and neither the compiler generated copy constructor nor your original copy constructor is doing the right job. And by the way, this applies to the copy assignment operator as well.
The point is to completely disable copying by making the copy constructor and assignment operators private to ensure that you cannot copy the objects. Or, implement proper copy operators to ensure that the ownership of the pointer is handled correctly.
One more question. Do anybody know how use random_shuffle() which I am using to shuffle my deck to shuffle deck diferrently every time, similar like using srand() with rand(). Cause now it shuffles the deck same way every time I run the game, so I think I need some way to seed some random number based by time every time I use random_shuffle(). Thank you.
Seed the random number generator with something that is not pre-defined, such as time.
srand(time(NULL));