揮発性インスタンスと非揮発性インスタンスの両方をサポートする必要があるクラスを作成しています (揮発性インスタンスはアトミック操作を使用し、非揮発性インスタンスは通常の操作を使用します)、正しい方法でそれを行っているかどうか疑問に思っています。これまでのクラス宣言の抜粋を次に示します。
class Yield {
public:
Yield();
Yield(Yield const &other);
Yield(Yield const volatile &other);
Yield &operator=(Yield const &other);
Yield &operator=(Yield const volatile &other);
Yield &operator+=(Yield const &other);
Yield &operator+=(Yield const volatile &other);
Yield volatile &operator+=(Yield const &other) volatile;
Yield volatile &operator+=(Yield const volatile &other) volatile;
// Other operators snipped...
};
質問 1: MSVC でコンパイルすると、次の警告が表示されます。
warning C4521: 'util::Yield' : multiple copy constructors specified
この警告は、このクラスを使用する際の問題の前兆ですか? それとも、安全に無視できますか?
質問 2: 現状では、揮発性引数と非揮発性
other
引数の両方ですべての演算子がオーバーロードされています。不揮発性インスタンスの揮発性アクセスが遅くなるのを避けるために、これが必要だと思いますか? 各メソッドを 4 回 (揮発性および不揮発性 lhs、それぞれ揮発性および不揮発性 rhs を持つ) ではなく 2 回 (揮発性 lhs および不揮発性 lhs) だけコーディングできるようにする代替手段はありますか?
これらの質問をまとめて問題ないことを願っています。それ以外の場合は、コメントを残してください。分割できます。ありがとう!