2012-09-14 38 views
6

Citazione di n3337 12.3.1/3costruttore di copia implicito

Un costruttore non esplicita copiare/spostare (12.8) è un costruttore di conversione. Un costruttore di copia/spostamento implicitamente dichiarato non è un costruttore esplicito ; può essere chiamato per conversioni di tipo implicito.

Citazione da ANSI ISO IEC 14882 2003

Un non-esplicito costruttore di copia (12.8) è un costruttore di conversione. Un costruttore di copie implicitamente dichiarato in non è un costruttore esplicito; può essere chiamato per conversioni di tipo implicito.

non ho idee, come copy-constructor può essere utilizzato per implicit tipo conversions. E se si tratta di errore di stampa/errore nello standard, perché non viene corretto dallo standard C++ 03? Qualsiasi link ed esempio (se possiamo usarlo per type conversions) sono molto apprezzati.

+1

+1 per fare la domanda. Anche io ho avuto questo dubbio dopo aver letto il testo standard citato nella tua risposta nell'altro argomento. – Nawaz

risposta

8

Un costruttore di copia può convertire da un oggetto di un tipo derivato da affettare:

struct A {}; 
struct B : A {}; 

B b; 
A a = b; // uses A::A(A const&) to convert B to A 
+1

Ciò rende intrinsecamente pericolosi i costruttori di copia quando ignorati. Una buona pratica è che, a meno che non le si desideri, è necessario impedire i Costruttori di copia e gli Operatori di assegnazione predefiniti. Prima di C++ 11, questo può essere fatto dichiarandoli privati ​​e non implementandoli (aiuta a commentare che lo stai facendo). In C++ 11, è possibile sostituire l'implementazione con '= delete'. –

+5

@ JonathanSeng: Questo è un approccio. Preferisco evitare l'ereditarietà da tipi non astratti, in modo che l'affettatura non sia possibile. Raramente c'è una buona ragione per ereditare da qualcosa di diverso da un'interfaccia astratta. –

0

In implict inlining funzione membro inline è definita all'interno della classe definizione.Le linea parola non è usata

Problemi correlati