2016-07-16 127 views
6

Nel paper P0135R0 c'è un esempio:garantito copia del giornale elision di vuoto in un costruttore

struct NonMoveable { 
    NonMoveable(int); 
    NonMoveable(NonMoveable&) = delete; 
    void NonMoveable(NonMoveable&) = delete; 
    std::array<int, 1024> arr; 
}; 
NonMoveable make() { 
    return NonMoveable(42); // ok, directly constructs returned object 
} 
auto nm = make(); // ok, directly constructs 'nm' 

Questo mi ha confuso:

void NonMoveable(NonMoveable&) = delete; 

cosa si tratta? In che modo il costruttore può essere vuoto?

UPD. Qualcuno collegato probable answer - No! Questa domanda è completamente diversa.

+0

* "No! Questa domanda è completamente diversa." * In che modo? Se non stai chiedendo cosa fa '= delete', allora cosa stai chiedendo? –

+1

@BaummitAugen Sto chiedendo come * constructor * può essere vuoto? – vladon

+0

Ma il costruttore è * alive and kicking * e si chiama 'NonMoveable (int)'. – hgiesel

risposta

6

Quel "vuoto" è ciò che chiameremmo "errore di battitura". Era probabile che l'intento fosse rimosso dall'operatore di assegnazione del movimento (sebbene non strettamente necessario, poiché l'eliminazione del costruttore di copie lo farebbe). Considerando che la persona ha scritto "vuoto", non sorprende che la persona abbia mancato anche la parte && e abbia dimenticato il parametro const nel parametro del costruttore della copia (anche se non strettamente necessario).

Fondamentalmente, c'è molto che non va; qualcuno l'ha scritto di fretta.

+6

È probabile che si intende eliminare l'assegnazione della copia. L'eliminazione del costruttore di copie non farà il lavoro. –

+1

Hai sbagliato a digitare Typevoido – Yakk

Problemi correlati