<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参照して ください。

本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。