I costruttori di traslochi in generale sono autorizzati a lanciare? Sì. Dovrebbero loro? No.
In generale, niente di ciò che si fa al loro interno dovrebbe essere qualsiasi cosa che possa essere lanciata. Non dovresti allocare memoria, chiamare altro codice o qualcosa del genere. L'unica ragione per scrivere un costruttore di mosse è di scappare con i puntatori di memoria e i riferimenti agli oggetti di qualcun altro. Dovresti copiare alcuni tipi di base e annullare i valori nell'altro oggetto. Quelle cose non dovrebbero buttare.
Quindi mentre è permesso, non è una buona idea. Se lo fai, ripensa quello che stai facendo nelle tue operazioni di spostamento.
fonte
2012-02-12 17:05:42
Non ho visto nulla nello standard per i costruttori di mosse non autorizzati a lanciare, ma ho visto che "Il costruttore di mosse implicitamente dichiarato per la classe X avrà il formato ' X :: X (X &&) ' ", e non vedo" noexcept "lì dentro. –
Nella bozza finale, non vedo 'noexcept' dichiarata per qualsiasi funzione ... – ronag
@ronag: Sei sicuro di star guardando? Perché ho aperto N3337 e ho cercato "noexcept" e ho ottenuto immediatamente la funzione 'swap' della classe. –