Ich dachte in der Theorie die Antwort auf diese Frage war ja.Kann eine abgeleitete Klasse nicht kopierbar gemacht werden, indem man den Kopierkonstruktor/operator in der Basisklasse als privat deklariert?
In der Praxis scheint jedoch mein Compiler (VS2010) in der folgenden Situation nicht zu klagen: Ich habe eine abstrakte Basisklasse, die eine gemeinsame Schnittstelle (noch keine Datenelemente) und verschiedene davon abgeleitete Sub- und Subsubclasses bereitstellt.
class Base
{
public:
Base() {}
virtual ~Base() {}
virtual void interfaceFunction1() = 0;
virtual void interfaceFunction2() = 0;
private:
Base(const Base&); // all derived classes should be uncopyable
Base& operator=(const Base&);
// no data members
};
Mein Compiler fand es unproblematisch, auch voll Kopierkonstruktoren in sub- oder subsubclasses zu implementieren.
Wie kann ich sicherstellen, dass jede von Base abgeleitete Klasse nicht kopierbar ist?
edit: Wenn ich gut verstehen, das ist genau das, was Scott Meyers 6 von Effective C in näheren Erläuterungen ++ (3. Auflage, 2005) mit seiner Idee der Klasse Uncopyable
(nur erweitert hier auf eine vollständige Schnittstelle Klasse). Was macht seine Idee aus? (Ich weiß, dass er privat erbt, aber das sollte kein Problem darstellen)
Kann ein Dummy-Datenelement hinzugefügt werden. –
Haben Sie andere Compiler getestet? Auch eine abgeleitete Klasse zu präsentieren wäre nett;) (eigentlich eher etwas von einem kompilierbaren Beispiel.) – luk32
Was ist der Nutzen einer reinen Funktion, die nicht virtuell markiert ist? –