2012-04-23 4 views
0

Я видел this вопрос о SO и задавался вопросом, где этот код действительно может быть использован в примере реального времени.Использование статического члена объявляющего класса внутри класса

struct a 
{ 
    static struct a b; 
}; 


int main() 
{ 
    a::b; 

    return 0; 
} 

Кроме того, что значение a::b; Спасибо за ваши входы.

ответ

0

Такой код может использоваться при реализации шаблона Singleton. Здесь объявляется один экземпляр типа a; если другие случаи каким-то образом запрещены, это синглтон. На практике, однако, я помню, они обычно используют менее запутывающий синтаксис.

И, что касается a::b, он ничего не полезен. Он просто показывает имя экземпляра. Более полезным примером может быть следующее:

struct a 
{ 
    static struct a b; 
    int data; 
}; 

a a::b = {9}; 

int main() 
{ 
    int stuff = a::b.data; 
    printf("%d\n", stuff); 

    return 0; 
} 
+0

Класс, число экземпляров которого может быть экземпляром, ограничен одним, называется одноточечным классом. Таким образом, в любой момент времени может существовать только один экземпляр, не более того. Мы можем реализовать это с помощью статических методов. Я не понимаю, как сделать статический объект собственного класса полезным при достижении этого – CppLearner

+0

@CppLearner. Определение 'a :: b' может быть помещено на предопределенный адрес компоновщиком (это связано с доступом к аппаратным средствам с отображением памяти) – anatolyg

+0

Спасибо, я только что увидел ниже код из [link] http://stackoverflow.com/questions/2593324/c-singleton-class, который подтверждает ваше объяснение. 'class MySingleton { общественный: статический MySingleton & getInstance() { статический экземпляр MySingleton; экземпляр возврата; } частный: MySingleton(); ~ MySingleton(); }; ' – CppLearner

Смежные вопросы