DevStarSJ.github.io 으로 이사했습니다.
더이상 이곳에는 새로운 내용을 업데이트 하지 않습니다. DevStarSJ.github.io 으로 접속해주세요.
페이지
(다음으로 이동...)
Home
Table of Contents
▼
레이블이
Effective_Cpp
인 게시물을 표시합니다.
모든 게시물 표시
레이블이
Effective_Cpp
인 게시물을 표시합니다.
모든 게시물 표시
2015년 1월 4일 일요일
그 밖의 이야기들
›
컴파일러 경고를 지나치지 말자 class B { public: virtual void f() const ; }; class D : public B { public: virtual void f(); }; 위 Co...
위치지정 new를 작성한다면 위치지정 delete도 같이 준비하자.
›
위치지정(placement) new 란 operator new의 기본형과 달리 매개변수를 추가로 받는 형태를 말한다. 개념적으로는 그냥 추가 매개변수를 받는 new 라고 이해하면 된다. 추가매개변수 new의 원조가 위치지정 매개변수를 추가로 받는 ...
new 및 delete를 작성할 때 따라야 할 기존의 관례를 잘 알아 두자.
›
void * operator new (std :: size_t size) throw (std :: bad_alloc) { using namespace std; if (size == 0 ) { size = 1 ;...
new 및 delete를 언제 바꿔야 좋은 소리를 들을지를 파악해 두자.
›
C++가 제공해주는 new/delete는 지극히 대중적이고 모든 사용자에게 욕먹지 않게끔 적당히 무난하게 동작한다. 하지만 어느 누구에게도 칭찬 들을 정도록 훌륭하진 못하다. 그렇기 때문에 개발자가 자신의 프로그램이 동적 메모리를 어떤 성향으로 사용...
new-handler의 동작 원리를 제대로 이해하자.
›
new 함수로 메모리 할당에 실패한 경우 예외를 던지게 되어 있습니다. 이 에러 처리 함수를 가리켜 new 처리자(new-handler, 할당에러 처리자) 라고 한다. namespace std { typedef void ( * new_...
템플릿 메타프로그래밍, 하지 않겠는가 ?
›
템플릿 메타프로그래밍(template metaprogramming: TMP) 은 컴파일 도중에 실행되는 템플릿 기반 프로그램을 작성하는 일을 말한다. 즉 C++ 컴파일러가 실행시키는 C++로 만들어진 프로그램 이다. TMP에는 엄청난 강점 이...
타입에 대한 정보가 필요하다면 특성정보 클래스를 사용하자.
›
STL은 기본적으로 컨테이너(container), 반복자(iterator), 알고리즘(algorithm), 유틸리티(utility) 들로 구성되어 있다. STL 반복자는 지원하는 연산에 따라 다섯 개의 범주로 나뉜다. 1. 입력 반복자(i...
타입 변환이 바람직할 경우에는 비멤버 함수를 클래스 템플릿 안에 정의해 두자.
›
모든 매개변수에 대해 암시적 타입 변환이 되도록 만들기 위해서는 비멤버 함수밖에 방법이 없다. 이것을 템플릿에 적용되게 하면 에러가 발생한다. template < typename T > class Rational { publi...
"호환되는 모든 타입"을 받아들이는 데는 멤버 함수 템플릿이 직방!
›
스마트 포인터(smart pointer) 는 포인터처럼 동작하면서도 포인터가 주지 못하는 상콤한 기능을 덤으로 갖고 있다. auto_ptr, tr1::shared_ptr, STL 컨테이너의 iterator 등이 있다.. 반면 일반 포인터도 스마트...
매개변수에 독립적인 코드는 템플릿으로부터 분리시키자.
›
아무 생각없이 템플릿을 사용하면 템플릿의 적, 코드 비대화(code bloat) 가 초래될 수 있다. 똑같은 내용의 코드가 여러 벌로 중복되어 파일로 구워진다는 뜻이다. Code 자체만 보면 깔끔하지만, 이진 코드가 템플릿으로 인해 불어터지는 불상사...
template으로 만들어진 기본 클래스 안의 이름에 접근하는 방법을 알아 두자.
›
몇 개 회사에 메세지를 전송하는 응용프로그램을 만들어야 할 경우를 생각해보자. 아래 예제와 같이 구현하였다. class CompanyA { public: void sendClear( const std :: string msg); vo...
typename의 두 가지 의미를 제대로 파악하자.
›
template < class T > class Widget ; template < typename T > class Widget ; 위의 선언문에서 class와 typename의 차이가 뭘까 ? 없다. 같은 뜻...
Template 프로그래밍의 천리길도 암시적 인터페이스와 컴파일 타임 다형성부터
›
객체 지향 프로그래밍 (OOP) 의 세계를 회전시키는 축은 명시적 인터페이스(explicit interface) 와 런타임 다형성(runtime polymorphism) 이다. 명시적 인터페이스(explicit interface) 란 소스코드...
›
홈
웹 버전 보기