Skip to content

C++:static

Magic statics

C++11 부터는 지역 static 객체 생성이 스레드 안전하게 보장하도록 표준에 추가되었다. 이 기능을 magic statics라 부르는 듯하다.

Troubleshooting

Duplicate symbol in static member

아래와 같이, 헤더파일 안에 정적 멤버 변수(static member variable)를 초기화 할 경우, 중복된 심볼 에러가 발생된다.

class BaseClass
{
public:
    static std::string bstring;
};
std::string BaseClass::bstring {"."};

이렇게 헤더 안에 정적멤버를 초기화해야할 경우 템플릿을 사용하면 된다.

template< class Dummy >
struct BaseClass_statics
{
    static std::string bstring;
};

template< class Dummy >
std::string BaseClass_statics<Dummy>::bstring = ".";

class BaseClass
    : public BaseClass_statics<void>
{};