Ich habe eine uncodierbare Klasse. Kopieren wäre problematisch. Ich möchte Garantie, dass es nicht immer kopiert werden, so dass ich seine Copykonstruktor deleted
:Wie erzwinge ich Kopierfehler, warum wird es nicht mit dem Konstruktor für gelöschte Kopien funktionieren?
class A {
public:
A();
A(const A&) = delete;
};
A fun() {
return A();
};
int main() {
A a = fun();
};
Leider g ++ wird das nicht kompilieren auf den Grund:
t.cc: In function ‘A fun()’:
t.cc:8:12: error: use of deleted function ‘A::A(const A&)’
return A();
^
t.cc:4:5: note: declared here
A(const A&) = delete;
^
t.cc: In function ‘int main()’:
t.cc:12:13: error: use of deleted function ‘A::A(const A&)’
A a = fun();
^
t.cc:4:5: note: declared here
A(const A&) = delete;
^
Aber Dies ist eine sehr klare Situation, in der Kopierfehler verwendet werden sollten, so dass der Kopierkonstruktor niemals aufgerufen werden sollte. Wieso ist es so?
Warte bis C++ 17, vielleicht wird es garantiert –
Whoops. Zur Antwort bewegt. –
Jesper wiederholt Ihre Antwort nicht, Sie haben die bevorstehenden Änderungen bis zu unseren Kommentaren nicht erwähnt –