shared pointer auto destroys it self