이 포스트를 만득 목적 기록해 두었다가, 필요할 때 보려고 이 포스트의 준비 상황 PC에 Windows가 설치되어 있어야 한다. 실행 창이 무엇인지 알아야 한다. 내용 작업하다가 윈도우가 업데이트 되면, 가끔 재시작 하라고 한다. 그런데 작업중이니, 몹시 불편하다. 그래서 이 재시작하라는 것만 끄니, 조용하다. 어떻게 재시작 팝업창을 방지 할 수 있는가? 윈도우의 시작 버튼을 누른다. 실행 버튼을 누른다. cmd 를 입력하고 엔터 를 친다. net stop wuauserv 치고 엔터를 친다. 이제 팝업창에 대해서 모라 말하는게 보이지 않을 것이다. - 컴퓨터를 껏다가 키면, 자동으로 다시 활성화 되므로, 더 이상 신경 쓸꺼 없다. 주의해야 할 것이 있는가? 윈도우 비스타 이상에선 관리자 모드로 실행해야 ..
분류 전체보기 검색 결과
항목 27에서 Pimpl 이디엄을 사용하여, 컴파일 타임 상호 의존성을 매우 줄였다. 하지만 Pimpl 을 어떻게 짜야만 더 좋고 안전하게 만들 수 있는지에 대해서는 무시하고 진행 했었다. 그런데.. 생뚱맞게 왜 항목이 "컴파일 방화벽" 이라는 말이 나왔지? 곰곰해 생각해 보면 Pimpl 이디엄은 그 컴파일러 입장에서 보면, 보이지 않는 벽같은 것이라 할 수도 있겠다. 음~ 본론으로 들어와서, 어떻게 만드는 것이 가장 좋을까? 크게 몇가지 규칙을 적어 본다. 모든 private 데이터를 XImpl에 넣는다.(함수는 제외) 모든 private 멤버들을 XImpl에 넣는다. 모든 Private와 Protected 멤버들을 XImpl 에 넣는다. XImpl을 전체적으로 X가 가지고 있는 클래스로 만들고, X를..
파트 1 ~ 2 까지 하면서 믿을 수 없게, 컴파일 의존성을 줄였다. 다음 코드는 파트 2 까지 정리된 코드이다. /* x.h : 원본 헤더, 컴파일 의존성 줄이기 위해 Pimple 적용된 모습 */ #include // 포워드 헤더 포함 #include "a.h" #include "b.h" class X : public A, private B { public: class C; // 포워드 선언 사용 X( const C& ); B f( int, char* ); C f( int, C ); C& g( B ); class E; // 포워드 선언 사용 E h( E ); virtual std::ostream& print( std::ostream& ) const; private: struct XImpl; XImpl..
파트 1에서 불 필요한 헤더를 제거하고 수정했다면, 파트2에선 기본 하는 일을 제외하고, 컴파일 의존성을 좀 주려 보자. 예제 코드 /* x.h : 원본 헤더 */ // #include 없어도 됨 // #include #include // 포워드 헤더 포함 #include #include "a.h" #include "b.h" #include "c.h" #include "d.h" // #include "e.h" class X : public A, private B { public: X( const C& ); B f( int, char* ); C f( int, C ); C& g( B ); class E; // 포워드 선언 사용 E h( E ); virtual std::ostream& print( std::o..
컴파일 시간을 줄이기 위한 그 첫번째 단계는 "불필요한 헤더 파일을 제거해야 한다" 부터 시작 된다. 왜냐하면 많은 헤더파일 포함은 그에 비례한 시간을 컴파일러에게 주어야 하기 때문이다. 그렇다면, 어떤 헤더 파일을 제거해도 되는지 아래 코드를 보자. /* x.h : 원본 헤더 */ #include #include #include /* A, B, C, D 혹은 E 모두 템플릿이 아니다. 단지 A와 C만 가상 함수들을 가지고 있다. */ #include "a.h" #include "b.h" #include "c.h" #include "d.h" #include "e.h" class X : public A, private B { public: X( const C& ); B f( int, char* ); C f..
다음 문제의 미묘한 문제를 지적해보자. ① 이름 은폐(name hiding)는 무엇인가? 파생된 클래스에서 기반 클래스 이름의 가시성에 어떻게 영향을 주는지 밝혀라 ② 다음 예제가 정확하게 컴파일 되는가? 가능한 좋은 답변을 달아보고, 의심 되는 부분을 고립시킨 후 설명해 봐라. namespace N { class C { /* 어쩌구 저쩌구 */ }; } int operator+( int i, N::C ) { return i + 1; } #include int main( void ) { N::C a[10]; std::accumulate( a, a+10, 0 ); } 분석 ① 가상 함수가 아니면 이름을 절대 가리지 말라고, Effective C++ 에서 설명하고 있었고, 역시 이 부분에 대해서 자세히 언급..
최근댓글