[C++] 다형성과 가상 소멸자
CPP2025. 3. 25. 14:59[C++] 다형성과 가상 소멸자

C++은 객체 지향 프로그래밍 언어이다.OOP의 속성으로는 은닉화, 캡슐화, 상속성, 다형성이 있고 OOP의 특성으로는 추상화가 있다.이중에서도 다형성은 쉽게 말하면 '모습은 같은데 형태는 다른 것'을 의미한다.상속관계에서 다형성이 활용되는데 주의해야할 것들 중 이번 글은 '가상 소멸자'에 대한 부분이다. parent* p = new child();우리는 위처럼 '업캐스팅'을 자주 사용할 때가 많다. 위 코드를 컴퓨터 입장에서 보면 부모 클래스 포인터로 무엇인가 가르키고 있기 때문에 가르키는 대상이 무조건 부모 클래스 객체라고 생각할 수 밖에 없다.(원하는 동작은 parent*로 가르키고 있지만 실 객체는 child라고 인식 시키고 싶은 것이다) 위 코드는 child클래스가 parent클래스로 부터 함수..

[CPP] static_assert
UE52024. 2. 7. 23:14[CPP] static_assert

기존의 C++에 존재하는 assertion을 발생하는 키워드는 #error 전처리기와 assert 메크로를 통해 발생시킬 수 있습니다. Assert 동적으로 배열을 할당 할 때 배열 사이즈는 양수이여야 하기 때문에 이를 assert를 통해서 검증할 수 있습니다. #include #include using namespace std; void foo (int age) { // assert를 이용한 유효성 확인 assert(age > 50); int* p = new int[age]; } int main(int argc, char* argv[]) { foo(26); return 0; } 위와 같이 assert를 이용한다면 오류가 발생하면 개발자에게 프로그램이 다양한 정보(Call Stack, 발생 위치 등)를 ..

[UE] Unreal Smart Pointer
UE52024. 1. 23. 23:33[UE] Unreal Smart Pointer

UE의 스마트 포인터 라이브러리에는 아래 4가지 스마트 포인터가 있습니다. - TSharedPtr - TSharedRef - TWeakPtr - TUniquePtr 위 스마트 포인터들은 메모리 할당과 추적의 부담을 해소해주도록 설계된 C++11의 스마트 포인터의 커스텀 구현입니다. 위 스마트 포인터들은 언리얼 오브젝트(UObject)에 대해 사용할 수 없습니다. 언리얼 오브젝트(UObject)는 별도의 메모리 추적 시스템(GC)를 사용하기 때문입니다. (UObject GC에 의헤 TSharedPtr로 관리됩니다. 그래서 TSharedPtr로 UObject를 가르킬 수 없습니다. => 사이클 발생) TSharedPtr 위에서 설명한것과 같이 TSharedPtr은 UObject를 가르킬 수 없습니다. UOb..

image