Angenommen, eine Funktion wie diese gibt es:std :: Bewe- Wie Programmierer zu warnen, nicht zu verwenden * bewegt von * Objekt
int * func()
{
std::unique_ptr<int> ptr(new int(3));
//Few more lines of code
//then one function added where programmer writes like some thing
SOME_OTHER_FUNC(std::move(ptr));
return ptr.get();
}
void SOME_OTHER_FUNC(std::unique_ptr<int> arg_ptr)
{
}
Gibt es eine Möglichkeit Programmierer zu warnen, solche Fehler mit std::move
zu vermeiden? Hier geht es nicht nur um unique_ptr
sondern auch um andere Objekte.
Gibt es einen Mechanismus, um eine Warnung zu generieren, wenn wir ein Objekt von unangemessen verwendet haben?
nicht sicher, ob duplicate aber nahe themenbezogen: http://stackoverflow.com/questions/39413502/why-should-a-move-constructor-or-move-assignment-operator-clear-its-argument/39413587# 39413587 – Hayt
Ich erwarte, dass Compiler-Schreiber eine Warnung für die Verwendung von allem erfinden, das in einen rvalue umgewandelt wurde, beispielsweise durch 'std :: move'. Wenn es Ihnen weh tut, sollten Sie einen Patch an den Autor Ihres Compilers schicken! –
@TobySpeight Ich bin skeptisch, dass eine solche Warnung eingeführt werden würde. Typen können Move-Konstruktoren/Zuweisungsoperatoren haben, die das Original in einem (teilweise oder sogar vollständig) spezifizierten Zustand belassen, und bestimmte (vielleicht sogar alle) Operationen würden wohldefiniertes Verhalten haben. Wie könnte der Compiler wissen, ob die Verwendung von vom Objekt verschobenem Objekt unbeabsichtigt war? – user2079303