2012-03-28 2 views
5

Можно создать дубликат:
Do static members of a class occupy memory if no object of that class is created?
Memory Allocation of Static Members in a Classстатический член класса собственного типа класса

«Класс не считается определен до тех пор пока его тело класса является полным, класс не может иметь члены данных своего типа. Класс может иметь элементы данных, которые являются указателями/ссылкой на свой собственный тип. "

  • C++ Primer (Липпман Lajoie)

Имеет смысл.

Но почему это разрешено?

class justAClass 
{ 
    public : 
    justAClass(); 

    private :   
    static justAClass justAMember; 
} 

Для указателей это понятно. Но как это будет работать над этим? Как я могу определить размер объекта такого класса? Разве это не рекурсивный случай (без базового условия), чтобы иметь член своего типа, даже если он статичен?

+0

Данные статических членов не вносят вклад в размер класса. –

ответ

6

Причина, по которой класс не может иметь членов данных своего типа, должен знать размер объекта класса. Например, один класс является локальной переменной в функции, компилятор может обрабатывать стек только в том случае, если он знает размер класса.

Для вашего случая статический член класса не находится в объекте класса, поэтому не влияет на размер объекта класса. Все нормально.

3

Формально отличием является то, что объявление статического члена в классе не является определением. Вы должны предоставить определение в другом месте (ровно один раз), а компилятору не нужно знать размер до тех пор, пока он не встретит определение. Статические элементы не влияют на размер самого класса. (Во многих отношениях декларация статического члена в классе очень похожа на объявление non-member extern.)

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