Есть ли способ ленивой инициализации статического подобъекта класса? - PullRequest
0 голосов
/ 19 февраля 2012

Есть ли способ инициализации статического подобъекта класса после запуска main ()?

Ответы [ 2 ]

2 голосов
/ 19 февраля 2012

Один из способов сделать это - заменить данные статического члена функцией статического члена.

Скажем, у вас есть этот класс:

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

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

Таким образом, вместо этого вы можете определить свой класс как:

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

Обратите внимание, что он не является потокобезопасным, но вы также можете сделать его потокобезопасным.

0 голосов
/ 19 февраля 2012

Вы можете использовать указатель для этого объекта:

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

SomeOtherClass* SomeClass::p;    

void main(){
    SomeClass::p = new SomeOtherClass();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...