issue-2 introduce shared_ptr