C++11: write move constructor with atomic<bool> member?
std::atomicクラスはコピーコンストラクタとムーブコンストラクタがdelete定義されるので、std::atomicクラスのオブジェクトをメンバ変数に持つクラスは、コピーコンストラクタとムーブコンストラクタが自動定義されません。
#include <atomic> #include <utility> struct X { std::atomic<int> value; }; int main() { X x1; X x2 = x1; // エラー! X x3 = std::move(x1); // エラー! }
このようなクラスをコピー/ムーブしたい場合は、自分でコピーコンストラクタとムーブコンストラクタを定義し、アトミックオブジェクトからloadした値をコピーする必要があります。
#include <atomic> #include <utility> struct X { std::atomic<int> value; X() {} X(const X& x) : value(x.value.load()) {} X(X&& x) : value(x.value.load()) { // 必要であればx.valueを無効な値にする } }; int main() { X x1; X x2 = x1; // OK X x3 = std::move(x1); // OK }