La mobilità consente una grande classe di ottimizzazioni. Eppure, ci si sente che lo fa a costo di un foro nella sicurezza statica di programmi:C'è un modo per identificare meccanicamente quali operazioni sono sicure su un oggetto spostato da?
Dopo una mossa, l'oggetto di origine viene lasciato in uno stato valido, ma non specificato, dove alcune operazioni sono legali, ma alcuni non lo sono. (In particolare vedere this SO question per le discussioni su questo argomento). Sembrerebbe che questo elenco di operazioni, anche se dipende da ciascun tipo, possa essere conosciuto in fase di compilazione. Tuttavia, il compilatore non mette in guardia circa gli usi non corretti degli oggetti spostati da (come discute lo this other SO question).
Sembrava che la filosofia C++ facesse affidamento sul compilatore per convalidare il più possibile (di ciò che è noto staticamente), uno dei tanti esempi di applicazione della conformità. Tuttavia, sembra che l'oggetto spostato da un oggetto possa essere utilizzato in modi pericolosi, senza che il compilatore possa tentare (o avere alcun mezzo) di catturarli.
Esiste effettivamente un meccanismo che consenta una migliore diagnostica dal compilatore? In caso negativo, perché non esiste un nuovo qualificatore da applicare ai metodi che possono essere utilizzati su un oggetto spostato da un altro o un altro meccanismo che consente verifiche statiche equivalenti?
Tale analisi statica è costosa e aumenterebbe in modo proibitivo i tempi di compilazione. Potresti avere un [linter] (https://en.wikipedia.org/wiki/Lint_%28software%29) separato per controllare invece queste cose. –
@JoachimPileborg: non vedo come uno strumento automatico possa raggiungere questo obiettivo. –
@LightnessRacesinOrbit sicuro, potrebbe cercare attributi che dichiarano i metodi come pericolosi sugli oggetti in uno stato specifico. Tuttavia, penso che non solo non ne valga la pena, ma anche che sia fuorviante, perché i difetti di progettazione dovrebbero essere risolti cambiando il design, non in qualche modo lavorando attorno a loro. – cdonat