completed cancel operation, use shared_ptrs