标准库中是否有与 Rust 的 `std::mem::drop` 等效的 C++?

Is there a C++ equivalent to Rust's `std::mem::drop` in the standard library?

Rust 中的函数 std::mem::drop 移动它的参数,然后通过超出作用域来销毁它。我在 C++ 中编写类似函数的尝试如下所示:

template <typename T,
          typename = std::enable_if_t<std::is_rvalue_reference<T &&>::value>>
void drop(T &&x) {
    T(std::move(x));
}

标准库中是否已经存在这样的函数?

编辑: 该函数可用于在超出范围之前调用对象的析构函数。考虑一个 class,它在文件句柄被销毁后立即关闭,但不会更早。为了论证,假设 ofstream 没有 close 方法。你可以这样写:

ofstream f("out");
f << "first\n";
drop(move(f));
// f is closed now, and everything is flushed to disk

C++的标准库没有这个函数。然而,你可以用这个成语达到同样的效果:

SomeType var = ...;
//do stuff with `var`.
{auto _ = std::move(var);}
//The contents of `var` have been destroyed.

正如评论中所指出的,C++ 缺乏 Rust 的能力,无法真正 阻止 你进一步使用 var。它的内容已被移出,但在 C++ 中它仍然是一个活动的、有效的对象,您甚至可以通过将其适当地转换为明确定义的状态来重用它。

当然,这需要类型是可移动构造的。某些类型如 lock_guard 不是,所以你在那里有点麻烦。这意味着提前关闭它的唯一方法是使用其内置界面。