[UE5 TIL] Day 15 - C++ 학습/과제 작성

JungHoon Eum·2026년 3월 17일

C++ 라이브 세션

참조

  • const auto& 쓰는 이유? 그냥 값만 받아오면 "복사" 를 해버림. 복사는 비효율적임. 근데 레퍼런스 &를 받아오면 값 수정이 되어버림. 그래서 const.
  • 주소 이동이 필요하면 pointer, 걍 값만 쓰고 버릴 참조면 reference

구조체와 클래스

  • 클래스는 구조체의 상위호환...이라고 볼 수도 있지만
  • 데이터만 관리할 때는 struct 역시 C++에서 쓴다. Like LineTraceHitResult

C++ 과제

인벤토리

https://github.com/opalian872/HW03.git

  • 목적 자체는 템플릿 클래스 활용해서 "어떤 자료형이든 아이템에 집어넣을 수 있는" 인벤토리 클래스 구현
  • but 내용물 자체는 PrintAllItems() 등 함수에서 Item 객체를 필수적으로 사용하는 경우가 너무 많아서 결합도가 높다 -> 안 좋은 디자인
  • 템플릿 클래스로 T* pItems_ 를 굳이 쓰기보단 그냥 Item 클래스를 받아도 되지 않았을까...
    -std::sort 쓰려면 #include <algorithm> 필요. 배열에서도 벡터에서와 똑같이 사용 가능하다.
  • class 외부에 비교함수 선언? 걍 inventory.h 헤더 class 선언 위에 구현해 두고 사용할 수 있음.
    • 서로 #include 많이 하는 경우에 그런 외부 함수들은 inline 앞에 추가하면 링커 에러 해결할 수 있다.
  • 템플릿 클래스는 "항상" "어떤 자료형이건" 받을 수 있는 클래스가 아니라, main에서 객체 만들 때 T 가 뭔지 설정하는 클래스 -> Inventory<Item> myInventory(10); 느낌
  • 깊은 복사를 할 때
    T* newPItems_=new T[], newPItems_[i] = pItems_[i], delete[] pItems, pItems = new T[].... 이럴 필요 없다
  • "메모리 생성" 은 한번만 newPItems 생성할 때 하고, pItems_는 포인터니까 그 메모리 영역 고대로 받아오고 newPItems_ 포인터만 nullptr 시키면 됨.
    • pItems_=newPItems_; 이렇게 대입.
profile
개발지망생

0개의 댓글