9

別のクラス (class2) の静的オブジェクトをプライベート メンバーとして持つ C++ クラス (class1) があります。

プログラムを使用すると、静的オブジェクトを初期化する必要があることがわかっています。これにはデフォルトのコンストラクターを使用できます (望ましくない値)。

静的オブジェクトを目的の値に一度だけ初期化することは可能ですか?それを含むクラス (class1) のオブジェクトを作成した場合のみですか?

どんな助けでも大歓迎です。

4

1 に答える 1

20

はい。

// interface

class A {

    static B b;
};

// implementation

B A::b(arguments, to, constructor); // or B A::b = something;

Aただし、クラスのインスタンスを作成しなくても初期化されます。ポインターを使用してコンストラクターで一度初期化しない限り、他の方法でそれを行うことはできませんが、それはおそらく悪い設計です。

あなたが本当にしたいのであれば、ここに方法があります:

// interface

class A {
    A() { 
        if (!Bptr)
            Bptr = new B(arguments, to, constructor);

        // ... normal code
    }

    B* Bptr;
};

// implementation

B* A::Bptr = nullptr;

ただし、私が言ったように、それはおそらく悪い設計であり、マルチスレッドの問題があります。

于 2012-05-08T13:29:16.597 に答える