C/C++ 디자인 패턴 (4) — 프로토타입(Prototype)

문서 편집기에서 "선택한 객체 복제"를 구현한다고 하자. 선택된 것은 Document*로만 알고 있는데, 실제로는 Invoice일 수도 Memo일 수도 있다. 복사 생성자는 정적 타입을 알아야 호출할 수 있어서, 타입마다 if나 dynamic_cast를 늘어놓게…

Continue ReadingC/C++ 디자인 패턴 (4) — 프로토타입(Prototype)

C++ 고급 문법 (21) — 가상 소멸자(Virtual Destructor)

Base* p = new Derived; delete p;는 컴파일도 실행도 문제없어 보인다. 하지만 Base의 소멸자가 가상이 아니면 delete는 정적 타입 Base의 소멸자만 호출한다. Derived가 잡은 자원은 해제되지 않고, 표준상으로는 미정의 동작이다.…

Continue ReadingC++ 고급 문법 (21) — 가상 소멸자(Virtual Destructor)

C++ 고급 문법 (5) — 임시 객체(Temporary Object)

const char* p = make_path().c_str(); 한 줄은 컴파일러 경고 없이 통과하고, 대개 출력도 멀쩡하게 나온다. 하지만 p가 가리키는 메모리는 이미 해제된 상태다. make_path()가 반환한 std::string은 이름 없는 임시 객체(temporary object)이고,…

Continue ReadingC++ 고급 문법 (5) — 임시 객체(Temporary Object)