std wurde diese move'ed:erhalte eine Fehlermeldung, oder zumindest eine Warnung, wenn eine Variable, die :: anderswo
void foo(int &&r) {
std::cout << r << std::endl;
}
int main() {
int i = 2;
foo(std::move(i));
i = 3; //no warning. any way to get some warnings here?
return 0;
}
Gibt es keine Möglichkeit, den Compiler sagen Sie mir, einen Fehler zu geben (oder Warnung) wenn ich die Variable versehentlich benutze, nachdem ich sie verschoben habe? Ich denke, das wäre sehr praktisch. Viele Male finde ich mich bewegende Variablen anderswo, aber dann muss ich manuell SEHR VORSICHTIG sein, dass ich sie danach nicht benutze. Nun, das hat noch keine Probleme verursacht, aber wer weiß das schon ... besser sicher!
Vielleicht gibt es einige Preprozessor-Tricks (oder ziemlich weit verbreitete Compiler-Erweiterungen), die es gibt, um das Zeug zu machen?
realistischeres Beispiel:
struct HugeStorage {
std::vector<double> m_vec;
HugeStorage(std::vector<double> vec) : m_vec(std::move(vec)) { }
};
struct SmallStorage {
std::vector<double> m_vec;
SmallStorage(std::vector<double> vec) : m_vec(std::move(vec)) { }
};
std::vector<double> vec_from_data_source() {
return std::vector<double>(); //only example!!
}
int main() {
std::vector<double> vec = vec_from_data_source();
if (vec.size() > 10000)
{
HugeStorage storage(std::move(vec));
//do some things, but I gotta be careful I don't do anything to vec
}
else
{
SmallStorage storage(std::move(vec));
//do some things, but I gotta be careful I don't do anything to vec
}
return 0;
}
Die Variable wurde nicht verschoben, nur ihr Wert. Es ist absolut nichts falsch daran, ihm einen neuen Wert zuzuweisen. –
Welche "Probleme" sehen Sie voraus und was ist das * tatsächliche * Problem mit dem Code, den Sie zeigen? –
@NikBougalis Aktualisiert mit realistischerem Beispiel – user2015453