보통 로그를 관리하는 Log 클래스와 어플을 관리하는 App 클래스는 Singleton pattern으로 하나만 생성해서 사용하는 것이 일반적인 경우가 있습니다. 이러한 경우, Singleton 객체간의 의존선이 존재할 때, 나중에 프로그램이 종료될 때 예상치 못한 에러가 야기될 수 있습니다. 아래 코드를 보고 프로그램 종료시 에러가 왜 나는지 예측해 보세요. ^^


http://www.gilgil.net/10260


#include <stdio.h>
#include <string.h>

class Log
{
  FILE* fp;
private:
  Log()
  { 
    fp = fopen("test.log", "wb");
  }
  virtual ~Log()
  {
    fclose(fp);
    fp = NULL;
  }
public:
  void write(const char* msg)
  {
    fwrite(msg, 1, strlen(msg), fp);
  };
public:
  static Log& instance()
  {
    static Log g_log;
    return g_log;
  }
};

class App
{
private:
  App()
  {
    //Log::instance().write("App::Appn");
  }
  virtual ~App()
  {
    Log::instance().write("App::~Appn");
  }
public:
  void start() {
    Log::instance().write("App::startn");
  }
  static App& instance()
  {
    static App g_app;
    return g_app;
  }
};

int main()
{
  App::instance().start();
  return 0;
}



번호 제목 글쓴이 날짜 조회 수
공지 [공지] IAMROOT 19차 커널 스터디 오리엔테이션 (zoom 접속 안내) [5] 문c(문영일) 2022.05.07 889
공지 [공지] IAMROOT 18차 커널 스터디 오리엔테이션 안내 [마감] [2] 문c(문영일) 2021.05.17 1251
공지 커널 스터디를 위한 문c 가이드입니다. [10] 문c(문영일) 2021.04.27 6520
1197 커널20기 모임 질문입니다. [16] 고미c 2023.04.29 838
1196 [커널 19차] 42 주차 이태백 2023.03.11 212
1195 아키텍처 스터디 모집 [4] 구본규 2022.10.21 836
1194 [커널 16차] 졸업 소회 [5] file 이파란 2022.10.18 1030
1193 [공지] 커널 16차 스터디를 종료합니다. (고생많으셨습니다!) [10] 이파란 2022.10.09 2319
1192 [커널 16차] 164주차 [3] 이파란 2022.10.01 314
1191 [커널 16차] 163주차 [3] 이파란 2022.09.25 101
1190 [커널 16차] 162주차 [2] 이파란 2022.09.17 117
1189 [커널 16차] 161주차 [3] 이파란 2022.09.03 107
1188 [커널 16차] 160주차 [2] 이파란 2022.08.27 69
1187 [커널 16차] 159주차 [1] 이파란 2022.08.20 66
1186 [커널 16차] 158주차 [1] 이파란 2022.08.13 92
1185 [커널 16차] 157주차 [2] 이파란 2022.08.06 86
1184 [커널 16차] 156주차 [1] 이파란 2022.07.31 64
1183 [커널 16차] 155주차 [1] 이파란 2022.07.23 85
1182 [커널 16차] 154주차 [3] 이파란 2022.07.17 79
1181 [커널 16차] 153주차 [2] 이파란 2022.07.09 85
1180 [커널 16차] 152주차 [5] 이파란 2022.07.03 335
1179 [커널 16차] 151주차 이파란 2022.06.26 91
1178 [커널 16차] 150주차 [3] 이파란 2022.06.19 105
XE Login