GObjectがCで行うようなライブラリによって実装できるのに、なぜC++がクラスオブジェクトを追加したのですか? C++ はコンパイル時にクラスオブジェクトを認識する必要があるため、これはより効率的です。したがって、C++ クラスの初期化/非初期化は例外セーフ ( RAII ) です。
一部の機能はより重要であり、さらに実装する必要があります。thread_localはstorage class specifierであるため、コンパイル時に知ることができ、コンパイラはより多くの最適化を行うことができます。
またhttp://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2659.htmで次のように述べています。
スレッド変数の動的初期化
現在、スレッド ローカル ストレージのすべての実装は、動的初期化 (およびおそらく非自明なデストラクタ) をサポートしていません。モントレブラン会議では、関数ローカル変数とスレッドローカル変数の動的な初期化をサポートすることについて、穏やかなコンセンサスが得られました。このような変数の初期化はすでに保護され、同期されているため、新しいテクノロジーは必要ありません。一方、名前空間スコープ変数の動的初期化の実装ははるかに難しく、追加のリンカーとオペレーティング システムのサポートが必要になる場合があります。
なぜthread_local
新しい言語キーワードとして導入されたのですか? その理由はThread Variable Dynamic Initializationにあるようです。