This would be useful for generic smart pointer types implemented in libraries, to avoid a swap in the destructor. Alternatively, just allow `finalize` to be called in `unsafe` blocks.