Chcę, aby abstrakcyjna klasa podstawowa była niekopiowalna i wymusić, aby klasy, które z niej pochodzą, były niekopiowalne. Poniższy kod używa kodu Uncopyable, zgodnie z definicją w noncopyable.hpp, ale nadal pozwala D, klasie pochodnej, zdefiniować konstruktor kopii.Zakaz definiowania konstruktora kopiowania w odziedziczonej klasie
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;
}
Ten kod kompiluje i działa (http://ideone.com/g4gGLm), kiedy oczekiwano go wyrzucić błąd kompilacji o D's kopię konstruktora. Może źle zinterpretowałem, co ta nieopłacalna klasa ma robić. Jeśli tak, czy istnieje sposób na wymuszenie, aby klasy pochodne nie definiowały konstruktora kopii? (Odpowiedź może korzystać z C++ 11, ale najlepiej nie doładowania)
Teraz rozumiem, do czego nie można kopiować (dzięki przykładowi klasy E). Dzięki – steve9164