1

私のプロジェクトには、静的プロパティを持ついくつかのクラスがあります。これらの静的プロパティがデータを読み取るコンテナーにデータを入力する 1 つの静的メソッドを作成するにはどうすればよいでしょうか。どのクラスの静的プロパティが最初に読み込まれるかを教えてください。

4

1 に答える 1

0

これを行う一般的な方法は、静的オブジェクトをゲッター関数でラップして、最初に使用されるまで作成されないようにすることです。

このように、順序はプログラムの設計によって決定されます。

このスキームの例は次のとおりです。

class MyClass {
   public:
     static
     MyContainer& GetTheContainer() {
        static MyContainer* fgCon = new MyContainer; // happens at first demand
        return *fgCon; // happens whenever MyClass::GetTheContainer() is called
     }

     static
     SomeObj& GetFromContainerAt(const int i) {
        MyContainer& c = GetTheContainer();
        return c.At(i);
     }
};

残りは、プログラムの設計に依存します。他のクラスでコンテナを埋めることができます。それらが を使用している限りGetTheContainer、コンテナが最初に作成されることを確認できます。または、コンテナーが空であるかどうかを確認するか (作成時にのみ空になることが確実な場合)、またはフラグ システムを使用して、作成時にコンテナーを埋めることができます。

     MyContainer& GetTheContainer() {
        static MyContainer* fgCon = new MyContainer; // happens at first demand
        static bool isNew = true; // only true the first time
        if (isNew) {
           // fill the container
           isNew = false;
        }
        return *fgCon; // happens whenever MyClass::GetTheContainer() is called
     }

たとえば、このスキームの詳細については、C++ Faqを参照してください。

于 2013-05-11T05:43:20.817 に答える