La domanda è come afferma il mio titolo.Un costruttore di mosse di default è considerato dichiarato dall'utente?
Sto chiedendo perché ho una classe con un costruttore di mosse predefinito, ma il codice che tenta di eseguire l'assegnazione della copia non sta affermando che l'operatore di assegnazione copia è eliminato (secondo Visual Studio 2015).
così ho controllato le regole here per operatori di assegnazione di copia implicitamente dichiarate:
Il implicitamente dichiarata o predefinita operatore di assegnazione copia per la classe T è definito come cancellato in una qualsiasi delle seguenti condizioni:
- ...
- T ha un costruttore mossa dall'utente dichiarato
- T ha un operatore di assegnazione mossa dall'utente dichiarato
Quindi, in pratica non sono sicuro se un in default mossa conta costruttore come dall'utente dichiarato. Il mio istinto mi dice di sì, ma quando si tratta di standard, mi piace sempre essere sicuro poiché le ipotesi possono essere costose.
Sì – Praetorian
@Praetorian Fiera abbastanza. Perché VS2015 si lamenta? Quando rimuovo il mio costruttore di movimento predefinito, il codice viene compilato correttamente. –
Presumibilmente la classe contiene dati membri che sono tutti trasferibili. Quando si rimuove il costruttore di spostamento dichiarato dall'utente non c'è nulla che impedisca la dichiarazione implicita di un operatore di assegnazione copia – Praetorian