remove boost, change to inherit std shared_ptr