static 멤버 변수를 명시적으로 사용하지 않으면 문제가 되나요?
글쓴이: kid1402 / 작성시간: 화, 2013/05/14 - 7:19오전
Manager Class 에 static 멤버 변수가 있고, 이 변수에 접근해서 리소스를 리턴하는 static 멤버 함수도 구현되어 있습니다.
Application Class는 이 매니저 클래스를 여러개 가질 수 있는데, 얻는 리소스를 free 하는 부분에서 가끔 문제가 발생합니다..
여기서 말하는 리소스는 단순한 메모리 풀이며 리소스를 얻는 static 함수에 접근할 때 클래스를 명시하지 않고(ex. CManagerClass::GetResource() 가 아니라 그냥 m_ManagerClass.GetResource()를 호출하는 형태) 리소스를 쓴 뒤에 명시적 호출( ex. CManagerClass::FreeResource( rc ) 형태 )로 리소스를 반환했는데, 반환하는 부분에서 가끔 죽습니다.
혹시나 해서 m_ManagerClass.GetResource() 형태로 호출하는 부분을 명시적 호출로 바꾸고 몇번 테스트를 해본 결과 잘 동작합니다만.. (명시적이 아니었던 경우에는 꽤 빈번하게 재현할 수 있었는데 같은 상황에서 발생하지 않네요)
어차피 GetResource() 역시 static 함수이므로 명시적으로 호출하든, 멤버변수형태로 호출하든 같은 동작을 할 것 같은데.. 혹시 정적 함수 호출과 관련해서 자세히 아시는 분은 명쾌하게 답변해주실 수 있을까요?
Forums:
"Application Class는 이 매니저
"Application Class는 이 매니저 클래스를 여러개 가질 수 있는데" -> 매니저 오브젝트를 여러개 가지는 거겠죠?
그리고 매니저 오브젝트가 여러개 생기더라도 static 멤버변수는 오직 단 하나만 존재하겠죠? static 변수이니까요.
"이 변수에 접근해서 리소스를 리턴하는 static 멤버 함수" -> 여기서 리소스가 혹시 static 멤버 변수가 가리키는 건가요?
음..
1) 매니저 클래스의 인스턴스를 여러개 가지는 거죠.
2) static이니까 멤버변수는 당연히 단 하나만 존재하겠죠..
3) 네 레소스는 static 멤버 변수가 리턴하는 메모리풀 malloc한 것입니ㅏㄷ
댓글 달기