STL 이란 ?

Posted 2012. 8. 13. 22:11

STL :: Standard Template Library

STL :: 표준        템플릿     라이브러리

 

장 점

  1. 자료의 유형(객체 지향 기법과 일반화 프로그래밍 기법)에 상관없이 구현되어 있기 때문에 포괄적이다.

  2. 테스트를 거친 검증된 라이브러리라 버그가없고 개발 기간을 단축할 수 있다.

 

단 점

  1. 디버깅이 힘들다. STL의 근원이 되는 템플릿은 효과적인 디버깅과 정지점 설정이 어렵다.

  2. 메모리 할당이 비효율적이다. 누수같은 버그는 없지만 메모리 단편화 현상을 유발시킨다. 하지만 메모리 단편화 문제는 사용자정의 할당자를 만들어 피할수 있다.

 

 구 성

  1. containers(자료구조)

  2. iterator(반복자)

  3. algorithm(알고리즘)

  4. functional(함수자)

'C++ > STL' 카테고리의 다른 글

iterateor  (0) 2012.08.13
STL 동적 할당 해제  (0) 2012.08.13
containers  (0) 2012.08.13
algorithm  (0) 2012.08.13

Run-Time Type Information

Posted 2012. 8. 13. 22:10

런타임 동안 해당 타입에 대한 정보를 알아보는것

우리가 게임이나 프로그램 실행중에 어떠한 객체의 타입을 알려면 그객체의 고유 ID를 멤버에  넣어서 그 ID를 통해 식별하거나 하는

방법을 사용하는데 RTTI를 사용하면 언제든 클래스 타입이 뭔지 알아낼수 있다.

그리고 다형성 객체의 동적 타입을 알아내기 위해 도입된 기능이다.

 

 

RTTI는 다형성 객체의 동적 타입을 알아내기 위해 만들어진 기능. base* 타입의 포인터가 포인팅 하고있는 객체가 실제로 type1 인지 type2 인지

 

알고자 할 때 쓰이는것.

 

정리하면..;

A라는 클래스의 객체 a만 가지고선 A라는 클래스의 객체인지 알 수 도없고, 어디서 상속받는 클래스의 객체인지  알수도 없다.

이런 경우 객체의 타입을 알아내기 위해서 RTTI를 사용한다.

 

RTTI특성상 객체를 생성 할 때마다 그 객체 내부에 타입 정보와 상속 정보를 넣어둔다. 때문에 속도의 저하가 일어난다.

이펙티브c++책에도 켯을때와 껏을때의 속도 차이가  난다는것을 알려준다.

 

이 안에 있는 장치중에 dynamic_Cast라는 것이 있다

객체가 상위 클래스로 형변황 할때 형변환 안정성을 검사해 주는 연산자.

 

 C형태의 형변환을 사용하여 포인터의 형변환을 사용하면 상속받지 않은 클래스도 형변환이 이루어 진다.

다만 어떤 결과가 나올지는 예상할 수 없는 일이다. 이런경우 dynamic_cast<>를 사용하면 RTTI를 사용해서

타입 확인을 하기 때문에 안전하게 형변환이 가능하다. 다만 dynamic_Cast는 RTTI정보를 사용하기 때문에 속도가 떨어진다.

 

그래서 변형된 형태의 RTTI를 사용한다. 보통 클래스 내부에 객체의 타입을 하나의 변수에 두고 그 변수를 확인 하는 방법이다.

class A

{

public:

A() { type = TYPE_A; }            // type값을 생성자에 넣는다

int GetType(){ return type; }   // 객체의 type를 반환한다

protected:

int type;                                 // 객체의 type를 저장하는 변수

};

 

 class B : public A

{

B() { type = TYPE_B; }      // 상속받은 클래스 마다 자신의 type를 저장한다

}

 

B* b = new B();

switch( b->GetType() )         // 객체의 type를 받아와서 작업한다

{

case TYPE_A:

break;

case TYPE_B:

break;

}

 이와같이 RTTI는 실행 시점에서 객체만을 가지고 그 객체의 타입(클래스)를 알아내서 작업을 하는 경우에 많이 사용된다.

 

explicit

Posted 2012. 8. 13. 22:09

묵시적 타입 변환

특별히 개발자가 명시해 주지 않아도 자동적으로 허용되는 변환

 예를들어 int형 데이터를 double로 변환 할 경우 int 데이터 타입이 표현 할 수 있는 수치의 범위보다 double 데이터 타입이 표현 할 수 있는

수치 범위가 더  크므로 묵시적 타입을 변환해도 상관없다.

 ex)

int a=100;

double b = n;

이런식이 묵시적 변환

 

명시적은

int a = 100;

bouble b = (double)a;

이게 명시적

 

 그럼 여기서..

sample a = sam1;

sample b =(sam1);

이렇게 묵시적 변환이 일어나서 복사 생성자가 호출된다.

 이걸 허용하지 않으려면 명시적으로 바꾸면 된다.

그걸 바꾸는 것이 explicit이다.

 

왜 쓰냐면.

자료형이든 문장이든 자동으로 변환되는 것이 늘 좋은 것만은 아니다. 묵시적 변환이 많이 발생하는 코드일수록  코드의 결과를 예측하기 어려워진다.

따라서 explicit는  코드의 명확함음 더하기 위해 자주 사용되는 키워드중 하나이다.

 

« PREV : 1 : ··· : 73 : 74 : 75 : 76 : 77 : NEXT »