Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Archives
Today
Total
관리 메뉴

Code Habit

[c++] dynamic_pointer_cast, static_pointer_cast 본문

카테고리 없음

[c++] dynamic_pointer_cast, static_pointer_cast

코드베어 2024. 2. 3. 12:15

dynamic_pointer_cast, static_pointer_cast 는 c++에서 스마트 포인터를 다룰때 상/하향 캐스팅을 위해 사용된다. 여기서 상/하향 캐스팅은 자식 클래스에서 부모 클래스로 변환 ( 상향 캐스팅 ), 부모 클래스에서 자식 클래스로 변환 ( 하향 캐스팅 )을 의미한다. 

 

- dynamic_pointer_cast

 dynamic_pointer_cast는 런타임에 타입의 안정성을 검사하는 동적 캐스팅을 수행한다. 이는 주로 하향 캐스팅 ( 부모 -> 자식 )에 사용된다.

 

- static_pointer_cast

 static_pointer_cast는 컴파일 타임에 수행하는 정적 캐스팅을 수행한다. 이는 상향 캐스팅( 자식 -> 부모 ), 하향 캐스팅 ( 부모 -> 자식 )에서 모두 쓰일 수 있지만 주로 상향 캐스팅에서 사용된다. 

 

class Base
{
public:
    int a;
    virtual void f() const { std::cout << "I am base!\n"; }
    virtual ~Base() {}
};
 
class Derived : public Base
{
public:
    void f() const override { std::cout << "I am derived!\n"; }
    ~Derived() {}
};

int main()
{
    auto base_ptr = std::make_shared<Base>();
    auto derived_ptr = std::make_shared<Derived>();
    
    auto upcast_ptr = std::static_pointer_cast<Base>(derived_ptr); // 상향 캐스팅
    auto downcast_ptr = std::dynamic_pointer_cast<Derived>(base_ptr); // 하향 캐스팅
}

 

static_pointer_cast를 사용해 상향 캐스팅 ( Drieved -> Base )를 수행하고 dynamic_pointer_cast를 사용해 하향 캐스팅 ( Base -> Derived )을 하였다.