Ho una classe non classificabile. Copiare questo sarebbe problematico. Voglio garanzia che non sarà mai copiato, così ho fatto il suo costruttore di copia deleted
:Come applicare la copia elision, perché non funzionerà con il costruttore di copie cancellato?
class A {
public:
A();
A(const A&) = delete;
};
A fun() {
return A();
};
int main() {
A a = fun();
};
Purtroppo, g ++ non verrà compilato questo sul motivo:
t.cc: In function ‘A fun()’:
t.cc:8:12: error: use of deleted function ‘A::A(const A&)’
return A();
^
t.cc:4:5: note: declared here
A(const A&) = delete;
^
t.cc: In function ‘int main()’:
t.cc:12:13: error: use of deleted function ‘A::A(const A&)’
A a = fun();
^
t.cc:4:5: note: declared here
A(const A&) = delete;
^
Ma questa è una situazione molto chiara in cui si dovrebbe usare copy elision, quindi il costruttore di copia non dovrebbe mai essere chiamato. Perché è così?
Attendi fino a C++ 17, forse sarà garantito –
Whoops. Spostato per rispondere. –
Jesper non sta ripetendo la tua risposta, non hai menzionato le modifiche imminenti fino ai nostri commenti –