이번 항목은 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는 무엇이며,..
Exceptional C++ Style 검색 결과
이번 항목은 메모리를 잡기 위해서 어떤 비용을 내고, 얼마나 잡히는지 생각해 보는 계기가 될 수 있을 것이라 생각하게 해 주는 항목이다. 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. 가상 함수는 비공개로 해야 한다. 나는 이럴 때 이런 질문을 한다. "어떻게 때문에, 이렇게 해야 하는가?" 일반적으로 나는 가상 함수는 공개 인터페이스와 함께 사용 하고 있었다...
이번 항목에선 C++ 프로그래밍에서 사용되는 캡슐화(encapsulation)에 대한 이야기들이다. 철학적인 이야기도 나오기 때문에, 보는 중간에 졸음까지 잤었지만, 자다가 일어나서 다시 읽을 때의 신선함 때문이라도, 꽤 재미있는 항목이라 나는 생각한다. 스타일데로 캡슐화에 대한 질문들을 시작해 보자,. 1 ) "캡슐화"가 뜻하는 바는 무엇이며, 객체지향적 설계와 프로그래밍에서 그것이 얼마나 중요한가? 책에선 "캡슐화" 라는 뜻부터 풀어 보는데, 캡슐화란 "내부 구현을 숨기고 감싸서 보호하는 것" 이다. 즉, 외부와 연결된 인터페이스가 내부에 의존하지 않는다면, 클래스 내부의 변화는 외부와 연결된 인터페이스에 영향을 미치지 않음으로써, 보호 되는 것이다. 그렇다면, 객체지향적 설계와 프로그래밍에서 그것이..
최근댓글