본문 바로가기

전체 글65

게으름을 이겨내는 방법 오늘 들은 법륜스님의 말씀에 따르면 부처님께서는 수행에 방해가 되는 다섯 가지를 다음과 같이 꼽으셨다. 1. 욕망 2. 하기 싫음 3. 게으름 4. 들뜸 5. 회의와 의심 그 중 게으름은 너무 잘 하려고 해서 생기는 것이다. 이것을 극복하기 위해서는 그냥 꾸준함을 가지면 된다. 너무 잘하려고 애쓰지도, 잘 안된다고 포기하지도 말고 비가 와도 눈이 와도 기분에 놀아나지 말고 어떻게든 계속 하면 된다. 소가 풀을 뜯듯이, 낙숫물이 바위를 뚫듯이 그냥 천천히 꾸준히 하면 된다. 2021. 8. 29.
Effective C++ (51) ~ (55) 51) new 및 delete를 작성할 때 따라야 할 기존의 관례를 잘 알아두자 operator new는 다음과 같은 요구사항을 만족해야 한다. 반환 값이 제대로 되어있어야 함 가용 메모리가 부족할 경우에는 new 처리자 함수를 호출해야 한다 크기가 없는 메모리 요청에 대한 대비책을 갖춰두어야 한다. 기본 형태의 new가 가려지면 안된다. 위 조건을 만족하는 operator new를 의사 코드로 만들면 다음과 같다. void * operator new(std::size_t size) throw(std::bad_alloc) { using namespace std; if (size==0) { size = 1; } while(true){ size 바이트 할당 if(할당 성공시) return 할당된 메모리에 대.. 2021. 8. 29.
Effective C++ (46) ~ (50) 46) 타입 변환이 바람직할 경우에는 비멤버 함수를 클래스 템플릿 안에 정의해 두자. 항목 24에서 모든 매개변수에 대해서 암시적 타입 변환이 되도록 만들기 위해서는 비멤버 함수밖에 방법이 없다는 이야기를 했었다. 이것을 템플릿으로 확장해보자. template class Rational { public: Rational(const T& numerator = 0, const T& denominator = 1); // 매개변수가 참조자로 전달되는 이유는 항목 20 const T numerator() const; const T denominator() const; }; template const Rational operator*(const Rational& lhs, const Rational& rhs) { ... 2021. 8. 28.
Effective C++ (41) ~ (45) 7. 템플릿과 일반화 프로그래밍 41) 템플릿 프로그래밍의 천릿길도 암시적 인터페이스와 컴파일 타임 다형성부터 클래스와 템플릿은 모두 인터페이스와 다형성을 지원한다. 명시적 인터페이스 : 소스 코드에 명시적으로 드러나는 인터페이스 런타임 다형성 : 실제 호출이 동적 타입 기반으로 런타임에 결정되는 경우 암시적 인터페이스 : 제대로 컴파일 되기 위해 필요한 ‘유효한’ 표현식 컴파일 타임 다형성 : 컴파일 도중 인스턴스화가 진행되는 함수 템플릿에 어떤 템플릿 매개 변수가 들어가느냐에 따라 호출되는 함수가 달라지는 경우 클래스의 경우 인터페이스는 명시적이고 함수의 시그니처를 중심으로 구성되어 있다. 다형성은 런타임에 가상함수를 통해 나타난다. 템플릿 매개변수의 경우 인터페이스는 암시적이고 유효 표현식을 기반으.. 2021. 8. 26.
연보라색 드레스를 입은 중년의 동양 여성이 연보라색 드레스를 입은 중년의 동양 여성이 큰 깃털 한가닥을 들고 서 있다. 바닥에는 사람 키만한 나무 막대들이 잔뜩 놓여져 있다. 고요함. 여자는 아주 천천히 깃털을 비교적 짧은 막대 끝에 올렸다. 다시 그 나무막대를 조금 더 긴 막대 끝에 올렸다. 그리고 그 나무막대를 다시 더 긴 막대 끝에 올렸다. 마치 느린 춤을 추듯 신중하게, 계속해서 나무를 쌓아올렸다. 가녀린 나무 막대들이 작은 입김에도 쓰러질 듯이 위태롭게 균형을 유지하고 있었다. 그녀의 늘어진 팔뚝에서 세월이 느껴졌다. 동시에 등과 종아리에는 동물과 같은 근육이 자리했다. 작고 강인한 몸이었다. 딱 붙는 드레스가 그런 그녀의 몸뚱이를 노골적으로 드러내고 있었다. 가슴이 빈약한 갈비뼈와 주름진 목은 훤히 드러났고, 가늘지 않은 골반과 다리는.. 2021. 8. 26.
Effective C++ (36) ~ (40) 36) 상속받은 비가상 함수를 파생 클래스에서 재정의하는 것은 절대 금물! 비가상 함수는 정적 바인딩, 가상 함수는 동적 바인딩으로 이루어진다. 만약 비 가상 함수를 재정의하고 호출한다면 호출하는 객체의 타입에따라 동작이 달라진다. 따라서 상속받은 비가상 함수는 절대로 재정의하지 말자. 37) 어떤 함수에 대해서도 상속받은 기본 매개변수 값은 절대로 재정의하지 말자 기본값을 정의해둔 가상 함수의 매개변수는 절대로 상속하면서 파생 클래스에서 값이 달라지거나 하지 않도록 주의하자. 가상 함수 자체는 동적으로 바인딩되어 있지만 기본 매개변수는 정적으로 바인딩되어있다. 이는 런타임 효율을 높이기 위해서이다. 따라서 파생 클래스에 정의된 가상 함수를 사용하면서 매개 변수는 기본 클래스의 매개변수를 사용하게 될 수.. 2021. 8. 25.
반응형