Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- Close
- File
- json
- channel
- install
- API
- windows
- c++
- C
- package
- bitcoin
- http
- Golang
- go언어
- mutex
- Python
- 책
- 리뷰
- Linux
- go
- range
- GO 언어
- tcp
- Sync
- 영화
- JavaScript
- Callback
- window
- write
- FOR
Archives
- Today
- Total
Code Habit
[c++] dynamic_pointer_cast, static_pointer_cast 본문
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 )을 하였다.