C++ static initialization orderingStatic Multilevel Inheritance with CRTP (Fast Intrusive Pointers)Instance depth ordering systemSingleton as static instanceA classy wine collection - Construction vs. InitializationAn implementation of a static any typeA polymorphic callable wrapper for any callableArray whose first element is arbitralily indexed – writing a container wrapperStatic Batch file AnalyserGenerators and Distributions 2.0Recursive data-types, binary tree, list-initialization

What's that red-plus icon near a text?

Did Shadowfax go to Valinor?

dbcc cleantable batch size explanation

Why is Minecraft giving an OpenGL error?

Why is 150k or 200k jobs considered good when there's 300k+ births a month?

How to regain access to running applications after accidentally zapping X.org?

Important Resources for Dark Age Civilizations?

Other Extensible Scripts Besides Latin

What defenses are there against being summoned by the Gate spell?

Can I make popcorn with any corn?

Are astronomers waiting to see something in an image from a gravitational lens that they've already seen in an adjacent image?

meaning of に in 本当に?

Can a Cauchy sequence converge for one metric while not converging for another?

Rock identification in KY

Why can't we play rap on piano?

Horror movie about a virus at the prom; beginning and end are stylized as a cartoon

Uncaught TypeError: 'set' on proxy: trap returned falsish for property Name

Was any UN Security Council vote triple-vetoed?

Perform and show arithmetic with LuaLaTeX

Why "Having chlorophyll without photosynthesis is actually very dangerous" and "like living with a bomb"?

If human space travel is limited by the G force vulnerability, is there a way to counter G forces?

Modeling an IP Address

Do I have a twin with permutated remainders?

What is a clear way to write a bar that has an extra beat?



C++ static initialization ordering


Static Multilevel Inheritance with CRTP (Fast Intrusive Pointers)Instance depth ordering systemSingleton as static instanceA classy wine collection - Construction vs. InitializationAn implementation of a static any typeA polymorphic callable wrapper for any callableArray whose first element is arbitralily indexed – writing a container wrapperStatic Batch file AnalyserGenerators and Distributions 2.0Recursive data-types, binary tree, list-initialization






.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;








0












$begingroup$


I have inherited legacy code containing static initialization order problems:



// A.hpp
class A
public:
static A A1;
A(...);
;

// A.cpp
A A::A1(...);

// B.cpp
#include "A.hpp"
A MY_FAVORITE_A = A::A1;


This fails when MY_FAVORITE_A is initialized before A::A1.



I'm trying to ensure that they are initialized in the proper order without replacing A::A1 with a function. Here's the modified code. Will it work reliably?



// A.h
class A
public:
static A A1;
A(...);
private:
class Initializer
public:
Initializer();

;

namespace
int a_initializer = A::initialize_statics();


// A.cpp
A MY_FAVORITE_A;

A::initialize_statics()

static A::Initializer initializer;
return 0;


A::Initializer::Initializer()

A::A1 = A(...);



B.cpp is unchanged.









share









$endgroup$


















    0












    $begingroup$


    I have inherited legacy code containing static initialization order problems:



    // A.hpp
    class A
    public:
    static A A1;
    A(...);
    ;

    // A.cpp
    A A::A1(...);

    // B.cpp
    #include "A.hpp"
    A MY_FAVORITE_A = A::A1;


    This fails when MY_FAVORITE_A is initialized before A::A1.



    I'm trying to ensure that they are initialized in the proper order without replacing A::A1 with a function. Here's the modified code. Will it work reliably?



    // A.h
    class A
    public:
    static A A1;
    A(...);
    private:
    class Initializer
    public:
    Initializer();

    ;

    namespace
    int a_initializer = A::initialize_statics();


    // A.cpp
    A MY_FAVORITE_A;

    A::initialize_statics()

    static A::Initializer initializer;
    return 0;


    A::Initializer::Initializer()

    A::A1 = A(...);



    B.cpp is unchanged.









    share









    $endgroup$














      0












      0








      0





      $begingroup$


      I have inherited legacy code containing static initialization order problems:



      // A.hpp
      class A
      public:
      static A A1;
      A(...);
      ;

      // A.cpp
      A A::A1(...);

      // B.cpp
      #include "A.hpp"
      A MY_FAVORITE_A = A::A1;


      This fails when MY_FAVORITE_A is initialized before A::A1.



      I'm trying to ensure that they are initialized in the proper order without replacing A::A1 with a function. Here's the modified code. Will it work reliably?



      // A.h
      class A
      public:
      static A A1;
      A(...);
      private:
      class Initializer
      public:
      Initializer();

      ;

      namespace
      int a_initializer = A::initialize_statics();


      // A.cpp
      A MY_FAVORITE_A;

      A::initialize_statics()

      static A::Initializer initializer;
      return 0;


      A::Initializer::Initializer()

      A::A1 = A(...);



      B.cpp is unchanged.









      share









      $endgroup$




      I have inherited legacy code containing static initialization order problems:



      // A.hpp
      class A
      public:
      static A A1;
      A(...);
      ;

      // A.cpp
      A A::A1(...);

      // B.cpp
      #include "A.hpp"
      A MY_FAVORITE_A = A::A1;


      This fails when MY_FAVORITE_A is initialized before A::A1.



      I'm trying to ensure that they are initialized in the proper order without replacing A::A1 with a function. Here's the modified code. Will it work reliably?



      // A.h
      class A
      public:
      static A A1;
      A(...);
      private:
      class Initializer
      public:
      Initializer();

      ;

      namespace
      int a_initializer = A::initialize_statics();


      // A.cpp
      A MY_FAVORITE_A;

      A::initialize_statics()

      static A::Initializer initializer;
      return 0;


      A::Initializer::Initializer()

      A::A1 = A(...);



      B.cpp is unchanged.







      c++ c++14





      share












      share










      share



      share










      asked 2 mins ago









      kevin clinekevin cline

      32516




      32516




















          0






          active

          oldest

          votes












          Your Answer





          StackExchange.ifUsing("editor", function ()
          return StackExchange.using("mathjaxEditing", function ()
          StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix)
          StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
          );
          );
          , "mathjax-editing");

          StackExchange.ifUsing("editor", function ()
          StackExchange.using("externalEditor", function ()
          StackExchange.using("snippets", function ()
          StackExchange.snippets.init();
          );
          );
          , "code-snippets");

          StackExchange.ready(function()
          var channelOptions =
          tags: "".split(" "),
          id: "196"
          ;
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function()
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled)
          StackExchange.using("snippets", function()
          createEditor();
          );

          else
          createEditor();

          );

          function createEditor()
          StackExchange.prepareEditor(
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: false,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: null,
          bindNavPrevention: true,
          postfix: "",
          imageUploader:
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          ,
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          );



          );













          draft saved

          draft discarded


















          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f216951%2fc-static-initialization-ordering%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown

























          0






          active

          oldest

          votes








          0






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes















          draft saved

          draft discarded
















































          Thanks for contributing an answer to Code Review Stack Exchange!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid


          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.

          Use MathJax to format equations. MathJax reference.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f216951%2fc-static-initialization-ordering%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          名間水力發電廠 目录 沿革 設施 鄰近設施 註釋 外部連結 导航菜单23°50′10″N 120°42′41″E / 23.83611°N 120.71139°E / 23.83611; 120.7113923°50′10″N 120°42′41″E / 23.83611°N 120.71139°E / 23.83611; 120.71139計畫概要原始内容臺灣第一座BOT 模式開發的水力發電廠-名間水力電廠名間水力發電廠 水利署首件BOT案原始内容《小檔案》名間電廠 首座BOT水力發電廠原始内容名間電廠BOT - 經濟部水利署中區水資源局

          格濟夫卡 參考資料 导航菜单51°3′40″N 34°2′21″E / 51.06111°N 34.03917°E / 51.06111; 34.03917ГезівкаПогода в селі 编辑或修订