1 ) 메모리가 충분하지 않을 경우 표준 형태의 new들이 오류를 보고하는 두 가지 주된 방식들을 설명하라. 표준형태 하나는 std::bad_alloc 예외를 던지는 방법과, 예외를 던지지 않고, NULL을 리턴하는 방법, 이렇게 두가지가 있다. 2 ) 예외를 던지지 않는 nothrow 형태의 new가 좀더 예외에 안전한 코드를 작성하는 데 도움이 될까? 근거와 함께 답하라. 나는 도움이 된다고 생각한다. 왜냐하면, NULL 을 반환하게 되었을 때, 처리하지 않고, 지나가면 되기 때문이다. 하지만 이 근거를 곰곰히 생각해 보면, 필요한 메모리를 잡는게 오류가 났는데, 어떻게 정상적으로 프로그램이 구동 될 수 있겠냐는 오류를 범한 것이다. 이 NULL 이 반환하게 되었을 때, 곰곰히 생각해 보면, 나는 할..
책 정리/Exceptional C++ Style 검색 결과
이번 항목은 new 에 대한 설명이다. 1 ) C++ 표준에 있는 new의 세 가지 형태는 무엇인가? 보통 new(new), 비투척 new(notrow new), 위치지정 new(placement new) 이렇게 있다. 아래 표를 보자 표준 new들 추가적인 매개변수 할당 수행 실패 가능 예외 던짐 교체가능 보통 new 없음 예 예(예외 던짐) std::bad_alloc 예 비투척 new std::nothrow_t 예 예(널 반환) 아니요 예 위치지정 new void* 아니요 아니요 아니요 아니요 한가지 신기한 것은 위치지정 new 의 경우, 메모리 할당을 수행하지 않는 다는 것! 이다. 위치지정 new의 경우, 그 자리에 생성자를 실생 시키는 역활을 수행한다. 2 ) 클래스에 고유한 new는 무엇이며,..
이번 항목은 메모리를 잡기 위해서 어떤 비용을 내고, 얼마나 잡히는지 생각해 보는 계기가 될 수 있을 것이라 생각하게 해 주는 항목이다. 1 ) new나 malloc으로 메모리 n 바이트를 잡으려 할 때, n 바이트만 잡힐까? 이 질문의 대답은 "적어도 n 바이트" 이상 잡힐 수 있다로 말 할 수 있다. 왜냐하면 "관리를 위한 기록", "조각(chunck)크기에 따른 여백" 때문이다. 관리를 위한 기록은 무엇인가? 범용 메모리 관리자를 이용하여, 메모리를 잡게 되면, 얼마나 잡혔는지 기록하는데, 이 기록은 나중에 해제하고자 할 때, 얼마나 해제 할지 결정하기 위해서이다. 일반적으로 최상위 메모리 번지에 기록해 둔다. 조각(chunk)크기에 의한 여백은 무엇인가? 고정 크기로 잡기 때문에, 고정 크기보다 ..
이번 항목에선 여러 수준의 메모리 관리 개념과, 중요성을 프로그래머에게 알려 준다. 1 ) 메모리 관리자 또는 메모리 할당자는 무엇이며, 그 기본 기능은 무엇인가? C++의 주된 동적 메모리 관리 전략 두가지를 간략히 서술하라. 메모리 관리자(memory manager) 또는 메모리 할당자(memory allocator)는 무엇인가? 말 그대로, 메모리를 관리해 주거나, 할당해 주는 녀석이다. 이 녀석들의 기본 기능은 무엇인가? 메모리를 얻어와 주거나, 메모리를 없애 준다. 경우에 따라선 쓰지 않으면 없애주기도 한다. C++의 주된 동적 메모리 관리 전략 두가지는 무엇인가? 범용 할당(general-purpose allocation) : 요청된 크기 만큼 메모리를 할당하는 전략, 매우 범용 적으로 사용 ..
이번 항목에선 암묵적으로 생성되는 함수들 때문에 생길 수 있는 문제점들을 짚어 보고, 문제점을 없애기 위해서 어떻게 해야 하는지에 대해서 배워 본다. 1 ) 클래스 정의 할 때, 암묵적으로 생성되는 함수들은 무엇이 있으며, 이 함수들을 암묵적으로 생성하는 것에 대한 의미와 암묵적인 함수들 때문에 생길 수 있는 문제점들을 구체적으로 설명하라. 암묵적으로 생성 되는 함수들은 무엇이 있는가? a. 기본 생성자 b. 복사 생성자 c. 복사 배정 연산자 d. 소멸자 언제 암묵적으로 생성 될까? 각 암묵적으로 생성되는 함수들을 정의하지 않은 상태에서, 각 함수들을 호출하는 코드를 작성하게 되면, 컴파일러가 각 함수들을 만들어 준다. 예외적으로, 생성자를 단 1개라도 정의하면, 생성자에 대해선 만들어 주지 않고, 복..
이번 항목은 C++ 에서 있어 뺄수 없는 가상성에 대한 논쟁이다. 가상성도 인터페이스의 캡슐화를 통하여, 내부 구현 상태를 숨기고 보호하는데, "가상성"을 제대로 쓰고 있는가? 에 대한 이야기를 시작으로, "어떻게" 가상성을 이용하고 있는가? 로 하여, "접근 지시자(access specifier)"를 적절하게 사용하는 방법에 대해서 집중적으로 말한다. 1 ) 기반 클래스 소멸자에 대한 "흔한 조언"은 무엇인가? a. 가상 함수는 비공개로 해야 한다. b. 소멸자는 가상 소멸자여야만 한다. 이 "흔한 조언"들을 따져보자. a. 가상 함수는 비공개로 해야 한다. 나는 이럴 때 이런 질문을 한다. "어떻게 때문에, 이렇게 해야 하는가?" 일반적으로 나는 가상 함수는 공개 인터페이스와 함께 사용 하고 있었다...
최근댓글