smart ptr first push
boost shared_ptr learn