<QtClassHelperMacros>

Macros de ayuda de clase. Más...

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)

Descripción detallada

Documentación de macros

Q_DISABLE_COPY(Class)

Desactiva el uso de constructores de copia y operadores de asignación para el Class dado.

Las instancias de las subclases de QObject no deben considerarse como valores que pueden copiarse o asignarse, sino como identidades únicas. Esto significa que cuando crees tu propia subclase de QObject (directora o indirecta), no debes darle un constructor de copia ni un operador de asignación. Sin embargo, puede que no sea suficiente simplemente omitirlos de tu clase, porque, si por error escribes algún código que requiera un constructor de copia o un operador de asignación (es fácil hacerlo), tu compilador lo creará pensativamente por ti. Usted debe hacer algo más.

El usuario curioso habrá visto que las clases Qt derivadas de QObject suelen incluir esta macro en una sección privada:

class MyClass : public QObject
{
private:
    Q_DISABLE_COPY(MyClass)
};

Declara un constructor de copia y un operador de asignación en la sección privada, de modo que si los usas por error, el compilador informará de un error.

class MyClass : public QObject
{
private:
    MyClass(const MyClass &) = delete;
    MyClass &operator=(const MyClass &) = delete;
};

Pero incluso esto podría no detectar absolutamente todos los casos. Puedes tener la tentación de hacer algo como esto:

En primer lugar, no lo hagas. La mayoría de los compiladores generarán código que utiliza el constructor de copia, por lo que el error de violación de privacidad será reportado, pero su compilador de C++ no está obligado a generar código para esta declaración de una manera específica. Podría generar código sin utilizar ni el constructor de copia ni el operador de asignación que hemos hecho privado. En ese caso, no se reportaría ningún error, pero su aplicación probablemente se bloquearía cuando llamara a una función miembro de w.

Véase también Q_DISABLE_COPY_MOVE y Q_DISABLE_COPY_X.

Q_DISABLE_COPY_MOVE(Class)

Una macro que desactiva el uso de constructores de copia, operadores de asignación, constructores de movimiento y operadores de asignación de movimiento para la dirección Class.

Véase también Q_DISABLE_COPY y Q_DISABLE_COPY_MOVE_X.

[since 6.9] Q_DISABLE_COPY_MOVE_X(Class, reason)

Al igual que Q_DISABLE_COPY_MOVE, esta macro desactiva las operaciones de copia y movimiento para la clase Class.

Además, esto documenta la reason razón por la cual esta clase no soporta operaciones de copiar/mover. En C++26 esto hará que el compilador informe de esa razón en su mensaje de error contra cualquier código que intente estas operaciones no soportadas.

Esta macro fue introducida en Qt 6.9.

Ver también Q_DISABLE_COPY_X y Q_DECL_EQ_DELETE_X.

[since 6.9] Q_DISABLE_COPY_X(Class, reason)

Al igual que Q_DISABLE_COPY, esta macro desactiva las operaciones de copia para la clase Class.

Además, esto documenta la reason razón por la cual esta clase no soporta operaciones de copia. En C++26 esto hará que el compilador informe de esa razón en su mensaje de error contra cualquier código que intente estas operaciones no soportadas.

Esta macro se introdujo en Qt 6.9.

Ver también Q_DISABLE_COPY, Q_DISABLE_COPY_MOVE_X, y 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.