defined smart_ptr duplicate funciton