컴파일 과정
전처리기 -> 컴파일러 -> 어셈블러 -> 링커
값에 의한 전달 (Call by Value)
: 함수를 호출하면서 파라미터를 넘길 때 값이 복제되어 전달된다.
참조에 의한 객체 전달 (Call by Reference)
: 파라미터로 넘겨지는 객체가 복제되는 오버헤드를 피하기 위해 사용한다. 주소값만 복제되고 내용은 복제되지 않기 때문에 값에 의한 전달보다 효율적이다.
얕은 복사 (Shallow Copy)
: 비트 단위 복제, 포인터가 가리키는 데이터는 빼놓고 피상적으로 그 변수값, 즉 주소값만 복제하는 것이다.
깊은 복사 (Deep Copy)
: 포인터 변수값만 피상적으로 복제하지 않고 그 변수의 맥락에 맞게 연관된 데이터까지 재귀적으로 온전하게 복제하는 것이다.
클래스가 동적 할당 메모리를 가진다면 소멸자, 복제 생성자, 대입 연산자를 꼭 구현해야 한다.
static 데이터 멤버
: 전역 변수와 유사하나 특정 클래스에 종속된다.
클래스 밖에서 static 데이터 멤버에 접근하려면 스코프 연산자(::)를 붙여주어야 한다.
const 데이터 멤버
: 생성 시점에 초기값을 부여한 다음 더는 값을 변경할 수 없게 된다.
static const 멤버를 이용해서 객체 간에 상수값을 공유하도록 할 수 있다.
mutable
: 이 속성을 접근 카운터 멤버 변수에 적용하면 컴파일러는 해당 변수의 변경이 메서드의 const에 영향을 미치지 않는 것으로 간주한다.
inline
: 호출 지점에 바로 메서드나 함수의 바디를 옮겨놓아 호출 오버헤드를 줄이는 기능을 한다.
소멸자가 virtual이 아닌 경우 객체가 소멸하더라도 해제되지 않은 메모리 영역이 남겨질 수 있다.
런타임 타입 정보(RTTI)
: 객체의 런타임 정보를 얻을 수 있는 기능이다.
dynamic_cast
: RTTI를 이용하여 객체 계층 간에 타입 변환을 안전하게 할 수 있도록 해준다.
typeid
: 런타임에 객체의 타입이 무엇인지 알 수 있게 해준다.
'프로그래밍 > C++' 카테고리의 다른 글
Reference (참조자) (0) | 2019.06.01 |
---|---|
while과 do while, #define과 inline (0) | 2019.05.31 |
C++ 기초 (0) | 2019.03.28 |
코드의 재사용성 (0) | 2019.03.19 |
STL컨테이너에 저장되어야할 항목과 반복자 (0) | 2019.03.18 |