C++03 モードで atomic<T> にコンストラクターがない理由

C++03 モードでは、atomic<T> テンプレート・クラスには意図的にコンストラクターが用意されていません。これは、「アトミック操作」セクションの GetUniqueInteger の例のように、すべてのファイルスコープ・コンストラクターが呼び出される前であっても、正常に動作する必要があるためです。atomic<T> にコンストラクターがあると、ファイルスコープ・インスタンスが参照された後で初期化される可能性があります。

コンストラクターのない C++ クラスでは、atomic<T> 型のオブジェクト X は、次のコンテキストで自動的にゼロに初期化されます。

下記のコードは、これらのポイントを示しています。

atomic<int> x;  // ファイルスコープにあるためゼロで初期化
 
class Foo {
    atomic<int> y;
    atomic<int> notzeroed;
    static atomic<int> z;
public:
    Foo() :
        y()     // y をゼロで初期化
    {
        // ゼロでない場合は無指定の値がある
    }
};
 
atomic<int> Foo::z; // スタティック・メンバーであるためゼロで初期化

C++11 モードでは、atomic<T> テンプレート・クラスには 2 つのコンストラクターが用意されています。

関連情報