Myślałem teoretycznie, że odpowiedź na to pytanie była twierdząca.Czy klasa pochodna może stać się uncopyable przez deklarowanie konstruktora kopiowania/operatora jako prywatną w klasie bazowej?
Jednak w praktyce mój kompilator (VS2010) nie wydaje się narzekać w następującej sytuacji: Mam abstrakcyjną klasę bazową zapewniającą pewien wspólny interfejs (ale nie mający żadnych członków danych) oraz różne subkategorie i pochodne od nich wyprowadzone.
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
};
Mój kompilator stwierdził, że nawet implementowanie konstruktorów pełnych kopii w sub-subub klasach jest bezproblemowe.
Jak mogę się upewnić, że każda klasa wywodząca się z bazy jest niekopią?
edit: Jeśli dobrze rozumiem, to jest dokładnie to, co Scott Meyers wyjaśniono w pkt 6 Effective C++ (3rd edition, 2005) z jego ideą klasy Uncopyable
(tylko rozszerzony tutaj, aby uzyskać pełną klasy interfejsu). Jaka jest różnica, która sprawia, że jego pomysł działa? (Wiem, że dziedziczy on prywatnie, ale to nie powinno stanowić problemu)
Może zostać dodany nieaktywny element danych. –
Czy testowałeś inne kompilatory? Również prezentacja klasy pochodnej byłaby miła;) (a właściwie coś podobnego do kompilowanego przykładu.) – luk32
Jaki jest pożytek z czystej funkcji, która nie jest oznaczona jako wirtualna? –