Nach [class.copy]/17 operator=(A)
ist ein gültiger Kopie Zuweisungsoperator, also ja, es reicht aus, um gelöscht erklärt den impliziten Bewegung Zuweisungsoperator zu unterdrücken und somit zusammen mit dem Copykonstruktor gelöscht wird die Klasse machen nicht kopierbar und nicht bewegbar.
Ihre Klasse ist komplizierter als nötig aber alles, was Sie brauchen, ist:
class A
{
A(const A&) = delete;
A& operator=(A) = delete;
public:
A();
};
Der Benutzer erklärte Copykonstruktor das implizite bewegen Konstruktor unterdrückt, und der Benutzer deklarierte Kopie Zuweisungsoperator unterdrückt die implizite Bewegung Zuordnung Operator.
Allerdings ist die operator=(A)
Form un-idiomatisch, also würde ich dazu neigen, operator=(const A&) = delete
sowieso zu verwenden. Es hat den gleichen Effekt.
N.B. Es gibt keinen Grund, gelöschte Funktionen als privat zu deklarieren, und tatsächlich führt dies zu einer viel schlechteren Diagnose. Öffentlich und gelöscht funktioniert meiner Erfahrung nach besser.
Auch ist ein destructor hier erforderlich?
für das, was erforderlich? Es hängt davon ab, was Ihr Standardkonstruktor tut.
Der Operator, den Sie löschen möchten, ist 'A & operator = (const A &)', ich glaube – porges
@Porges: Nein, ich möchte sowohl 'A & operator = (const A &) '** und **' löschen A & operator = (A &&) '. – ronag