![[C++] 다형성과 가상 소멸자](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWB2bS%2FbtsMUrxouUA%2F6Lqw6AbYE9q31kYQ6JsTy1%2Fimg.png)
C++은 객체 지향 프로그래밍 언어이다.OOP의 속성으로는 은닉화, 캡슐화, 상속성, 다형성이 있고 OOP의 특성으로는 추상화가 있다.이중에서도 다형성은 쉽게 말하면 '모습은 같은데 형태는 다른 것'을 의미한다.상속관계에서 다형성이 활용되는데 주의해야할 것들 중 이번 글은 '가상 소멸자'에 대한 부분이다. parent* p = new child();우리는 위처럼 '업캐스팅'을 자주 사용할 때가 많다. 위 코드를 컴퓨터 입장에서 보면 부모 클래스 포인터로 무엇인가 가르키고 있기 때문에 가르키는 대상이 무조건 부모 클래스 객체라고 생각할 수 밖에 없다.(원하는 동작은 parent*로 가르키고 있지만 실 객체는 child라고 인식 시키고 싶은 것이다) 위 코드는 child클래스가 parent클래스로 부터 함수..
![[CPP] static_assert](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeKoym%2FbtsEAa4ekca%2Fk1u8pYO0wZCwKdV47obFUK%2Fimg.jpg)
기존의 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](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8HXxr%2FbtsDQ2eydoN%2FqXZ44GQ2KYVOMmULCVkmC0%2Fimg.jpg)
UE의 스마트 포인터 라이브러리에는 아래 4가지 스마트 포인터가 있습니다. - TSharedPtr - TSharedRef - TWeakPtr - TUniquePtr 위 스마트 포인터들은 메모리 할당과 추적의 부담을 해소해주도록 설계된 C++11의 스마트 포인터의 커스텀 구현입니다. 위 스마트 포인터들은 언리얼 오브젝트(UObject)에 대해 사용할 수 없습니다. 언리얼 오브젝트(UObject)는 별도의 메모리 추적 시스템(GC)를 사용하기 때문입니다. (UObject GC에 의헤 TSharedPtr로 관리됩니다. 그래서 TSharedPtr로 UObject를 가르킬 수 없습니다. => 사이클 발생) TSharedPtr 위에서 설명한것과 같이 TSharedPtr은 UObject를 가르킬 수 없습니다. UOb..