weak_ptr은 왜 필요할까? shared_ptr 순환 참조 문제 이해하기
🚀 들어가며 이전 글에서는 shared_ptr의 내부 구조를 살펴보았습니다. shared_ptr은 객체의 생명주기를 관리하기 위해 Control Block을 사용하고, Control Block 안에는 strong count와 weak count 같은 정보가 저장됩니다. shared_ptr은 매우 편리한 도구입니다. 객체의 소멸 시점을 정확하게…
Series Archive
C++의 문법 자체를 설명하기 보다는 왜 이런 구조가 필요한지, 내부에서 어떤 일이 일어나는지, 그리고 실제 게임 개발과 엔진 개발에서 어떻게 활용되는지를 중심으로 정리하는 카테고리입니다.
🚀 들어가며 이전 글에서는 shared_ptr의 내부 구조를 살펴보았습니다. shared_ptr은 객체의 생명주기를 관리하기 위해 Control Block을 사용하고, Control Block 안에는 strong count와 weak count 같은 정보가 저장됩니다. shared_ptr은 매우 편리한 도구입니다. 객체의 소멸 시점을 정확하게…
🚀 들어가며 이번 글에서는 shared_ptr의 내부 구조 즉, 동작 매커니즘을 살펴보고자 합니다. 이전 글에서는 C++ 스마트 포인터의 기본 개념과 함께 unique_ptr, shared_ptr, weak_ptr의 사용 기준을 살펴봤습니다. 특히 shared_ptr을 설명할 때 중요한 문장이 있었습니다. “객체의…
🚀 들어가며 C++ 스마트 포인터에 대해 살펴봅니다. C++에서 메모리 관리는 항상 중요한 주제입니다. C++는 사용자(개발자)에게 메모리 관리 책임을 맡기는 대표적인 프로그래밍 언어입니다. 원시 포인터를 직접 다룰 때는 아래와 같이 메모리를 할당하고 해제할 수 있습니다.…
dynamic_cast를 왜 써야 하는지, RTTI 개념부터 typeid 활용까지 한 번에 정리했습니다. 👉 잘못된 캐스팅으로 인한 버그, RTTI로 안전하게 해결할 수 있습니다. C++로 게임이나 엔진을 개발하다 보면 이런 문제를 만나게 됩니다. “이 포인터가 실제로…
🚀 들어가며 게임을 만들다가 이런 경험을 해보셨을 겁니다. 컴퓨터가 빠르면 게임이 빨라지고 컴퓨터가 느리면 게임이 느려진다 같은 코드인데 실행 환경에 따라 게임 속도가 달라집니다. 이 문제를 해결하는 핵심 개념이 바로 deltaTime입니다. 🎯 문제 상황…
📚 입력 시스템 시리즈 1편: GetAsyncKeyState로 키 입력 처리 2편: Pressed / Held / Released 상태 관리 3편: 입력 시스템을 엔진 구조로 확장 🚀 들어가며 이전 글에서는 키 입력을 단순히 확인하는 것을 넘어서, Pressed…
📚 입력 시스템 시리즈 1편: GetAsyncKeyState로 키 입력 처리 2편: Pressed / Held / Released 상태 관리 3편: 입력 시스템을 엔진 구조로 확장 🚀 들어가며 이전 글에서는 GetAsyncKeyState를 이용해 입력 상태 관리하는 방법을 살펴봤습니다.…
📚 입력 시스템 시리즈 1편: GetAsyncKeyState로 키 입력 처리 2편: Pressed / Held / Released 상태 관리 3편: 입력 시스템을 엔진 구조로 확장 🚀 들어가며 게임을 만들다 보면 가장 먼저 필요한 기능 중 하나가…
C++를 공부하다 보면 함수 포인터(Function Pointer), std::function, Delegate 같은 개념들을 접하게 됩니다. 그런데 처음에는 이런 생각이 들기도 합니다. 함수를 왜 변수처럼 전달할까? 왜 콜백(Callback) 구조가 필요한 걸까? 그리고 게임 엔진을 조금 더 깊게 보다…
델리게이트 시리즈 1편: 함수 포인터 2편: std::function 3편: Delegate 구현 4편: 엔진 스타일 Delegate 들어가며 이전 글에서는 std::function을 기반으로 멀티캐스트 델리게이트 구조를 직접 구현해봤습니다. class Delegate { public: void Add(std::function<void()> func) { functions.push_back(func);…