Domanda

Esiste un modo per inizializzare un sotto-oggetto statico di una classe dopo main ()?

È stato utile?

Soluzione

Un modo per farlo è sostituire i dati dei membri statici con la funzione dei membri statici.

Dì che hai questa classe:

class A
{
   static B static_b; //static member data
};

//.cpp
B A::static_b; //definition (required)

Quindi, invece di poter definire la tua classe come:

class A
{
   static B static_b()  //static member function!
   {
       static B b;
       return b;
   }
};

Nota che non è thread-safe, ma puoi anche farlo da thread-safe.

Altri suggerimenti

Puoi usare un puntatore per questo oggetto:

class SomeClass{
public:
    static SomeOtherClass* p;
};

SomeOtherClass* SomeClass::p;    

void main(){
    SomeClass::p = new SomeOtherClass();
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top