add more impl for shared ptr