<QtClassHelperMacros>
클래스 헬퍼 매크로. 더 보기...
| Header: | #include <QtClassHelperMacros> |
매크로
| 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) |
매크로 문서
Q_DISABLE_COPY(Class)
지정된 ` Class`에 대해 복사 생성자 및 할당 연산자의 사용을 비활성화합니다.
QObject 의 하위 클래스 인스턴스는 복사하거나 할당할 수 있는 값으로 간주되어서는 안 되며, 고유한 정체성으로 간주되어야 합니다. 즉, QObject 의 하위 클래스(디렉터 또는 간접)를 직접 만들 때, 해당 클래스에 복사 생성자나 할당 연산자를 정의해서는 안 됩니다. 하지만 단순히 클래스에서 이를 생략하는 것만으로는 충분하지 않을 수 있습니다. 실수로 복사 생성자나 할당 연산자가 필요한 코드를 작성할 경우(이런 실수는 쉽게 발생할 수 있음), 컴파일러가 이를 대신 생성해 줄 수 있기 때문입니다. 따라서 더 많은 조치를 취해야 합니다.
호기심 많은 사용자라면 QObject 에서 파생된 Qt 클래스들이 일반적으로 비공개 섹션에 다음 매크로를 포함하고 있다는 사실을 눈치챘을 것입니다:
class MyClass : public QObject
{
private:
Q_DISABLE_COPY(MyClass)
};이는 사적 섹션에 복사 생성자와 할당 연산자를 선언하여, 실수로 이를 사용하려고 할 경우 컴파일러가 오류를 보고하도록 합니다.
class MyClass : public QObject
{
private:
MyClass(const MyClass &) = delete;
MyClass &operator=(const MyClass &) = delete;
};하지만 이 방법으로도 모든 경우를 완벽하게 잡아낼 수는 없습니다. 다음과 같은 코드를 작성하고 싶은 유혹을 느낄 수도 있습니다:
우선, 절대 그렇게 하지 마십시오. 대부분의 컴파일러는 복사 생성자를 사용하는 코드를 생성하므로 접근성 위반 오류가 보고되겠지만, 사용 중인 C++ 컴파일러가 이 문장에 대해 특정 방식으로 코드를 생성해야 할 의무는 없습니다. 컴파일러는 우리가 비공개로 설정한 복사 생성자나 할당 연산자 중 어느 것도 사용하지 않는 코드를 생성할 수도 있습니다. 이 경우 오류는 보고되지 않겠지만, ` w`의 멤버 함수를 호출하면 애플리케이션이 충돌할 가능성이 높습니다.
Q_DISABLE_COPY_MOVE 및 Q_DISABLE_COPY_X도 참조하십시오 .
Q_DISABLE_COPY_MOVE(Class)
주어진 ` Class`에 대해 복사 생성자, 할당 연산자, 이동 생성자 및 이동 할당 연산자의 사용을 비활성화하는 편리한 매크로입니다.
Q_DISABLE_COPY 및 Q_DISABLE_COPY_MOVE_X도 참조하십시오 .
[since 6.9] Q_DISABLE_COPY_MOVE_X(Class, reason)
Q_DISABLE_COPY_MOVE 와 마찬가지로, 이 매크로는 Class 클래스에 대한 복사 및 이동 연산을 비활성화합니다.
또한, 이 문서는 reason 에서 이 클래스가 복사/이동 연산을 지원하지 않는 이유를 설명합니다. C++26에서는 이러한 지원되지 않는 연산을 시도하는 모든 코드에 대해 컴파일러가 오류 메시지에 해당 이유를 표시하게 됩니다.
이 매크로는 Qt 6.9에서 도입되었습니다.
Q_DISABLE_COPY_X 및 Q_DECL_EQ_DELETE_X도 참조하십시오 .
[since 6.9] Q_DISABLE_COPY_X(Class, reason)
Q_DISABLE_COPY 와 마찬가지로, 이 매크로는 Class 클래스에 대한 복사 연산을 비활성화합니다.
또한, 이 문서는 reason 에서 이 클래스가 복사 연산을 지원하지 않는 이유를 설명합니다. C++26에서는 이러한 지원되지 않는 연산을 시도하는 모든 코드에 대해 컴파일러가 오류 메시지에 해당 이유를 표시하게 됩니다.
이 매크로는 Qt 6.9에서 도입되었습니다.
Q_DISABLE_COPY, Q_DISABLE_COPY_MOVE_X 및 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.