Rust中的函数std::mem::drop移动其参数,然后通过超出范围将其销毁.我在C++中编写类似函数的try 看起来是这样的:

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

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

Edit:该函数可用于在超出范围之前调用对象的析构函数.考虑一个类,在文件句柄被销毁时关闭它,而不是更早.为了论证,假设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.

正如 comments 中指出的,C++缺乏RIST的能力,实际上可以使你从var使用prevent.它的内容已经被移动,但是在C++中,它仍然是一个有效的对象,甚至可以通过适当地将它转换为一个定义良好的状态来重用它.

当然,这要求类型是可移动构造的.有些类型,比如lock_guard,不是这样的,所以你在那里有点像水管.这意味着尽早关闭它的唯一方法是使用它的内置接口.

Rust相关问答推荐

有没有方法处理rust中嵌套的ok_or()?

计算具有相邻调换且没有插入或删除的序列的距离

使用Rust s serde_json对混合数据类型进行优化'

在没有引用计数或互斥锁的情况下,可以从Rust回调函数内的封闭作用域访问变量吗?

如何在 struct 的自定义序列化程序中使用serde序列化_WITH

铁 rust 中的泛型:不能将`<;T作为添加>;::Output`除以`{Float}`

如果包名称与bin名称相同,并且main.ars位于工作区的同一 crate 中,则无法添加对lib.ars的依赖

在Rust内联程序集中使用字符串常量

Rust面向对象设计模式

如何获取光标下的像素 colored颜色 ?

使用 select 处理 SIGINT 和子等待!无阻塞

如何在 Rust 中编写一个通用方法,它可以接受任何可以转换为另一个值的值?

使用 Option 来分配?

为什么带有生命周期指定的方法不能被调用两次?

由特征键控的不同 struct 的集合

Rustlings 切片原语

具有生命周期和以后引用的可变方法

有没有办法使用 NASM 语法进行内联汇编?

如何将 u8 切片复制到 u32 切片中?

当引用不再被borrow 时,Rust 不会得到它