Con le funzioni membro eliminate in modo esplicito in C++ 11, vale ancora la pena ereditare da una classe base non calcolabile?Con le funzioni membro eliminate in modo esplicito in C++ 11, vale ancora la pena ereditare da una classe base non calcolabile?
Sto parlando del trucco in cui si eredita privatamente una classe base che ha un costruttore di copie privato o cancellato e un'assegnazione di copia (ad esempio boost::noncopyable
).
I vantaggi proposti in questo question sono ancora applicabili a C++ 11?
Non capisco perché alcune persone sostengono che è più semplice rendere una classe non copiabile in C++ 11.
In C++ 03:
private:
MyClass(const MyClass&) {}
MyClass& operator=(const MyClass&) {}
In C++ 11:
MyClass(const MyClass&) = delete;
MyClass& operator=(const MyClass&) = delete;
EDIT:
Come molti hanno sottolineato, è stato un errore nel fornire corpi vuoti (es. {}) per il costruttore di copie private e l'operatore di assegnazione delle copie, be perché ciò consentirebbe alla classe stessa di richiamare quegli operatori senza errori. Per prima cosa ho iniziato a non aggiungere {}, ma ho riscontrato alcuni problemi di linker che mi hanno fatto aggiungere {} per qualche motivo sciocco (non ricordo le circostanze). Lo so meglio. :-)
Non stai descrivendo un idioma, ma solo una sua implementazione. L'idioma rimane ed è ora più semplice scrivere. –
Com'è più semplice della scrittura di un costruttore di copia privata vuoto e di un operatore di assegnazione di copia privata? –
Modificato per evitare l'uso improprio del termine "idioma". –