2015-10-21 14 views
11

Secondo these orientamenti:Necessità di dichiarare distruttore come difetto

Se c'è bisogno del distruttore predefinito, ma la sua generazione è stata soppresso (ad esempio, definendo un costruttore movimento), utilizzare =default.

Non riesco a immaginare quando il codice sarebbe mal formato senza un distruttore predefinito predefinito in classe che ha il costruttore di mosse.

Qualcuno può mostrarmi un esempio conferma la citazione sopra?

struct S { 
    S() {}; 
    S(S&&) {}; // move ctor 
}; 

int main() { 
    S s; // there is no need to declare dtor explicitly =default 
} 
+1

Typo? "Se è necessario il costruttore ** predefinito ** ..." – songyuanyao

+1

@songyuanyao non penso. Sezione descrive l'uso di ** distruttori ** – alexolut

+2

Anche se la sezione ha diversi refusi (con codice non compilabile che mischia 'A' /' F'' a'/'act') – Jarod42

risposta

7

Penso che sarebbe una sorta di errore, la dichiarazione implicita di distruttore di default dovrebbe avere nulla a che fare con la definizione di un costruttore mossa.

dalla norma, 12,4 $ 4,5 distruttori [class.dtor]

4 Se una classe non ha distruttore user-dichiarato, un distruttore è implicitamente dichiarata come default (8.4). Un distruttore implicitamente dichiarato è un membro pubblico in linea della sua classe.

5 Un distruttore default per una classe X è definito come cancellato se:

(5.1) - X è una classe unione-like che ha un membro variante con un distruttore non banale,

(5.2) - qualsiasi subobject potenzialmente costruzione ha tipo di classe M (o matrice stessa) e M è un distruttore eliminati o un distruttore che è inaccessibile distruttore stabilizzato,

(5,3) - o per un distruttore virtuale , ricerca del non-arrayLa funzione di deallocazionegenera un'ambiguità o una funzione che è eliminata o inaccessibile dal distruttore predefinito.