개발/C++(4)
-
C++ 스마트 포인터, unique_ptr, shared_ptr, weak_ptr
이 글은 이재범 님의 '모두의 코드'에서 '씹어먹는 C++ 13장'을 참고하여 공부한 내용입니다. 처음 게임 서버 개발자 면접을 봤을 때가 생각납니다. 그때 질문 중 하나로 스마트 포인터에 대해 설명하는 것이었고, 저는 "자세히는 모르겠습니다. 단지 자원의 할당과 해제를 자동적으로 해주는 요소로 알고 있습니다."라고 대답했습니다. 요즘 공부하고 보니 나는 정말 아는 것이 없구나 느낍니다. C와 C++은 자원 관리를 수동으로 하기에 개발자는 신경 쓸 일이 더 많습니다. 거기에 게임 서버의 경우 메모리 관리가 잘못되면 메모리 부족으로 모든 서비스가 다운될 수도 있는 치명적인 문제를 발생시킬 수 있습니다. 하지만 대규모 작업을 여러 개발자들과 협업하게 되면 자원 관리는 더더욱 힘들어질 것입니다. 그런 문제를 ..
2025.03.05 -
C++ std::move 그리고 std::forward
이 글은 이재범 님의 '모두의 코드'에서 '씹어먹는 C++ 12장'을 참고하여 공부한 내용입니다.C에서 사용하던 값은 크게 2가지로 분류할 수 있었습니다.int a = 3; 대입 연산자를 기준으로 좌측에 잇는 값을 좌측값, 우측에 있는 값을 우측값으로 구분하였습니다. 좌측값은 보이는 그대로 값을 담을 수 있는 공간을 가진 변수로 주소를 가지고 있는 게 특징입니다. 우측값은 위 3과 같이 위 표현식이 끝나면 사라지는 값으로, 주소를 가질 수 없는 값을 말합니다. 하지만 현대의 C++의 값에는 위 범주를 포함한 5가지 분류가 있습니다. Generalized Lvalue, glvalue이 유형은 주소를 구할 수 있는 값으로, 주소연산자 &를 통해 주소를 알 수 있는 특징이 있습니다. 그리고 아래에서 설명할 x..
2025.03.04 -
C++ sizeof 그리고 random
sizeof는 C부터 사용했던 연산자로 malloc과 같이 메모리를 할당할 때 크기를 나타내기 위해 주로 사용했습니다. C++에서도 sizeof 연산자를 사용할수 있으며 간단한 사용법을 알아보려고 합니다. sizeof주로 배열의 크기를 계산하기 위해 사용되며 해당 변수의 값에 상관없이 메모리의 크기를 알 수 있습니다.std::cout 리터럴값도 사용가능하며, char와 같이 자료형이 들어갈 수 도 있습니다. 마지막은 int와 double의 산술연산은 int가 double로 암시적 형변환을 통해 double과 double의 합으로 계산됩니다. 그래서 double의 크기인 8바이트가 출력된 것을 확인할 수 있습니다. sizeof 연산자는 위 예시들과 같이 사용하면 컴파일 타임에 처리됩니다. 즉 실행전에 ..
2025.02.19 -
C++ 시작하기, 전처리문, inline 그리고 네임스페이스
처음 C++을 98규격 프로젝트 기반으로 공부를 해서 결과물 중심으로 학습을 하였습니다. 그래서 지나쳐 온 부분도 많고 새롭게 배워야 할 모던 C++ 부분도 많기에 복습을 하며 다시 배워보려고 합니다. 그리고 추후 게임개발을 하기위해 언리얼 프레임워크도 공부할 생각입니다. 전처리문코드를 컴파일 하기 전, 처리되는 명령어들로 전처리기 프로그램을 통해 실행됩니다. 전처리문은 #으로 시작해서 줄바꿈으로 구분되며 다양한 기능을 처리합니다. include#include 다른 네임스페이스 혹은 클래스, 메서드를 사용하기 위해 위 전처리문을 사용합니다. 이 전처리문은 처음 접했을 때에는 다른 헤더 파일 안의 코드를 사용하기 위해 참조하기 위한 전처리문으로 이해했습니다. 하지만 이 내용은 틀렸습니다. include ..
2025.02.19