<QtClassHelperMacros> プロキシページ

マクロ

マクロのドキュメント

Q_DISABLE_COPY(Class)

指定されたClass に対して、コピーコンストラクタと代入演算子の使用を無効にします。

QObject のサブクラスのインスタンスは、コピーや代入が可能な値としてではなく、一意の ID として考える必要があります。つまり、QObject のサブクラス(ディレクタまたは間接クラス)を作成する場合、そのサブクラスにコピー・コンストラクタや代入演算子を与えてはいけません。というのも、もし間違ってコピー・コンストラクタや代入演算子を必要とするコードを書いてしまった場合(それは簡単です)、コンパイラーはあなたのために考えて作ってくれるからです。それ以上のことをしなければならない。

好奇心旺盛なユーザーは、QObject から派生した Qt クラスが、通常このマクロを private セクションに含んでいることをご存知でしょう:

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_MOVE(Class)

与えられたClass に対して、コピーコンストラクタ、代入演算子、移動コンストラクタ、移動代入演算子の使用を無効にする便利なマクロ。

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.