<QtClassHelperMacros> Proxy-Seite
Makros
Q_DISABLE_COPY(Class) | |
Q_DISABLE_COPY_MOVE(Class) |
Makro-Dokumentation
Q_DISABLE_COPY(Class)
Deaktiviert die Verwendung von Kopierkonstruktoren und Zuweisungsoperatoren für die angegebene Class.
Instanzen von Unterklassen von QObject sollten nicht als Werte betrachtet werden, die kopiert oder zugewiesen werden können, sondern als eindeutige Identitäten. Wenn Sie also eine eigene Unterklasse von QObject (direkt oder indirekt) erstellen, sollten Sie ihr keinen Kopierkonstruktor oder Zuweisungsoperator geben. Es reicht jedoch nicht aus, sie einfach in Ihrer Klasse wegzulassen, denn wenn Sie versehentlich einen Code schreiben, der einen Kopierkonstruktor oder einen Zuweisungsoperator erfordert (was leicht passieren kann), wird Ihr Compiler ihn für Sie erstellen. Sie müssen mehr tun.
Der neugierige Benutzer wird gesehen haben, dass die von QObject abgeleiteten Qt-Klassen dieses Makro typischerweise in einem privaten Abschnitt enthalten:
class MyClass : public QObject { private: Q_DISABLE_COPY(MyClass) };
Es deklariert einen Kopierkonstruktor und einen Zuweisungsoperator in der privaten Sektion, so dass der Compiler einen Fehler meldet, wenn Sie sie versehentlich verwenden.
class MyClass : public QObject { private: MyClass(const MyClass &) = delete; MyClass &operator=(const MyClass &) = delete; };
Aber auch dies kann nicht jeden Fall abdecken. Sie könnten versucht sein, etwas Ähnliches zu tun:
Zunächst einmal sollten Sie das nicht tun. Die meisten Compiler werden Code erzeugen, der den Kopierkonstruktor verwendet, so dass der Fehler der Datenschutzverletzung gemeldet wird, aber Ihr C++-Compiler ist nicht verpflichtet, Code für diese Anweisung auf eine bestimmte Weise zu erzeugen. Er könnte Code generieren, der weder den Kopierkonstruktor noch den Zuweisungsoperator verwendet, den wir privat gemacht haben. In diesem Fall würde kein Fehler gemeldet werden, aber Ihre Anwendung würde wahrscheinlich abstürzen, wenn Sie eine Mitgliedsfunktion von w
aufrufen.
Siehe auch Q_DISABLE_COPY_MOVE.
Q_DISABLE_COPY_MOVE(Class)
Ein Komfortmakro, das die Verwendung von Kopierkonstruktoren, Zuweisungsoperatoren, Verschiebekonstruktoren und Verschiebezuweisungsoperatoren für die angegebene Class deaktiviert.
Siehe auch Q_DISABLE_COPY.
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.