Rust中的函數std::mem::drop
移動它的參數,然後通過超出範圍來破壞它。我在C++寫的類似功能的嘗試看起來是這樣的:在標準庫中是否有一個C++等價於Rust的`std :: mem :: drop`?
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
我不明白你爲什麼需要在C++中這樣的東西。你的用途是什麼? –
據我所知,沒有任何東西可以調用,以使該調用後給定的變量無效。是否有可能只是使用塊而已? '{T x; }/* x超出範圍* /' – Ryan
學習一種新語言時,有時你必須使用不同的習語。我看不到一個'drop'就像是慣用的C++的情況。我誠實地想不出你想要它的一個單一原因。 –