본문 바로가기

Programming/Ubuntu

[C++] static member variable and function

Window 환경의 코드를 Linux로 porting하는 것을 하고 있는데, 계속해서 차이가 많이 났는데, 특히 static member variable에 관한 문제로 머리가 아팠다.
g++ 환경에서는 static member variable은 사용하기 전에 일단 클래스 외부에서 선언을 해 주어야 하는 것 같다. static member variable은 private member 이어도 선언하는 것은 가능하다.

#include <stdio.h>

class Count
{
    private:
        int Value;
        static int Num;
    public:
        Count() {Num++;}
        ~Count() {Num--;}

        static void InitNum() {
            Num = 0;
        }
        static void OutNum() {
            printf("Current object = %d\n", Num);
        }
};
int Count::Num;

int main() {
    Count::InitNum();
    Count::OutNum();
    Count C, *pC;
    C.OutNum();
    pC = new Count;
    pC->OutNum();
    delete pC;
    pC->OutNum();
    printf("size=%d\n",sizeof(C));
    return 0;
}