Voglio rendere una classe di base astratta non copiabile e imporre che tutte le classi che ne derivano siano non copiabili. Il codice seguente utilizza il noncopyable di Boost come definito in noncopyable.hpp ma consente comunque a D, la classe derivata, di definire un costruttore di copie.Proibire la definizione di un costruttore di copie in una classe ereditata
class noncopyable
{
protected:
noncopyable() {}
~noncopyable() {}
private: // emphasize the following members are private
noncopyable(const noncopyable&);
const noncopyable& operator=(const noncopyable&);
};
class D : noncopyable
{
public:
D() { }
D(const D&) { }
};
int main()
{
D a;
D b(a);
return 0;
}
Questo codice viene compilato ed eseguito (http://ideone.com/g4gGLm), quando mi aspettavo di gettare un errore di compilazione su D's costruttore di copia. Forse ho interpretato male ciò che questa classe noncopyable è destinata a fare. In tal caso, esiste un modo per forzare le classi derivate a non definire un costruttore di copie? (La risposta può usare C++ 11, ma preferibilmente non potenzia)
Ora capisco cosa non è realizzabile (grazie al tuo esempio di classe E). Grazie – steve9164