introduce c++11 shared_ptr