should this be a shared_ptr? If not then if the caller stores it then there's no protection against the pointer becoming invalid at some future time.