<QtClassHelperMacros>
Macros d'aide pour la classe. Plus d'informations...
| Header: | #include <QtClassHelperMacros> |
Macros
| Q_DISABLE_COPY(Class) | |
| Q_DISABLE_COPY_MOVE(Class) | |
(since 6.9) | Q_DISABLE_COPY_MOVE_X(Class, reason) |
(since 6.9) | Q_DISABLE_COPY_X(Class, reason) |
Documentation des macros
Q_DISABLE_COPY(Class)
Désactive l'utilisation des constructeurs de copie et des opérateurs d'affectation pour la classe donnée Class.
Les instances des sous-classes de QObject ne doivent pas être considérées comme des valeurs pouvant être copiées ou assignées, mais comme des identités uniques. Cela signifie que lorsque vous créez votre propre sous-classe de QObject (directrice ou indirecte), vous ne devez pas lui attribuer de constructeur de copie ni d'opérateur d'affectation. Cependant, il ne suffit pas de les omettre dans votre classe, car si vous écrivez par erreur un code qui nécessite un constructeur de copie ou un opérateur d'affectation (c'est facile à faire), votre compilateur s'occupera de le créer pour vous. Vous devez faire plus.
L'utilisateur curieux aura vu que les classes Qt dérivées de QObject incluent généralement cette macro dans une section privée :
class MyClass : public QObject { private: Q_DISABLE_COPY(MyClass) };
Elle déclare un constructeur de copie et un opérateur d'affectation dans la section privée, de sorte que si vous les utilisez par erreur, le compilateur signalera une erreur.
class MyClass : public QObject { private: MyClass(const MyClass &) = delete; MyClass &operator=(const MyClass &) = delete; };
Mais même cette méthode ne permet pas d'éviter tous les cas de figure. Vous pourriez être tenté de faire quelque chose comme ça :
Tout d'abord, ne faites pas cela. La plupart des compilateurs génèrent du code qui utilise le constructeur de copie, de sorte que l'erreur de violation de la vie privée est signalée, mais votre compilateur C++ n'est pas tenu de générer du code pour cette déclaration d'une manière spécifique. Il pourrait générer un code n' utilisant ni le constructeur de copie ni l'opérateur d'affectation que nous avons rendu privé. Dans ce cas, aucune erreur ne serait signalée, mais votre application se bloquerait probablement lorsque vous appelleriez une fonction membre de w.
Voir également Q_DISABLE_COPY_MOVE et Q_DISABLE_COPY_X.
Q_DISABLE_COPY_MOVE(Class)
Une macro de commodité qui désactive l'utilisation des constructeurs de copie, des opérateurs d'affectation, des constructeurs de déplacement et des opérateurs d'affectation de déplacement pour l'adresse Class.
Voir aussi Q_DISABLE_COPY et Q_DISABLE_COPY_MOVE_X.
[since 6.9] Q_DISABLE_COPY_MOVE_X(Class, reason)
Comme Q_DISABLE_COPY_MOVE, cette macro désactive les opérations de copie et de déplacement pour la classe Class.
En outre, elle documente la raison pour laquelle cette classe ne prend pas en charge les opérations de copie/déplacement ( reason ). En C++26, le compilateur signalera cette raison dans son message d'erreur à l'encontre de tout code qui tente d'effectuer ces opérations non prises en charge.
Cette macro a été introduite dans Qt 6.9.
Voir aussi Q_DISABLE_COPY_X et Q_DECL_EQ_DELETE_X.
[since 6.9] Q_DISABLE_COPY_X(Class, reason)
Comme Q_DISABLE_COPY, cette macro désactive les opérations de copie pour la classe Class.
En outre, elle documente la raison pour laquelle cette classe ne prend pas en charge les opérations de copie ( reason ). En C++26, le compilateur signalera cette raison dans son message d'erreur à l'encontre de tout code qui tente d'effectuer ces opérations non prises en charge.
Cette macro a été introduite dans Qt 6.9.
Voir aussi Q_DISABLE_COPY, Q_DISABLE_COPY_MOVE_X, et Q_DECL_EQ_DELETE_X.
© 2026 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.