<QtClassHelperMacros> プロキシページ
マクロ
Q_DISABLE_COPY(Class) | |
Q_DISABLE_COPY_MOVE(Class) |
マクロの説明
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.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。