std::mem::drop
函数在Rust中移动其参数,然后通过超出作用域来销毁它。我尝试在C++中编写类似的函数,代码如下:
template <typename T,
typename = std::enable_if_t<std::is_rvalue_reference<T &&>::value>>
void drop(T &&x) {
T(std::move(x));
}
这个函数是否已经在标准库中存在?
编辑: 这个函数可以用来在作用域结束前调用对象的析构函数。考虑一个类,在销毁时关闭文件句柄,但不会在之前关闭。为了方便起见,假设ofstream
没有一个close
方法。你可以这样写:
ofstream f("out");
f << "first\n";
drop(move(f));
// f is closed now, and everything is flushed to disk
{ T x; } /* x超出范围 */
- Ry-drop
会在任何情况下与 C++ 的习惯用语相似。说实话,我想不出你为什么要使用它的一个理由。 - Edward Strange