Why are you storing pointer to string? Fist of all you do not need it. Second: you have a leak because you never written a destructor. Change string* to string and you will not need explicitely define copy constructor and destructor. Also move constructing and move assigment would be generated and work as intended.
but thats weird because i did not have to declare new int to have the program work.?
Welcome to the world of undefined behavior. When undefined behavior happens your program may work, may not work, may work strangely, explode your computer or summon demons from your nose. Al these behaviors are acceptable by C++ standard.