강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

넘블님의 프로필 이미지
넘블

작성한 질문수

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

JobQueue #3

생명주기를 위한 의도적 복사

작성

·

17

0

안녕하세요 강의 정말 감탄하면서 잘 수강하고 있습니다.

Job에서 보편참조로 받았는데 forward로 하지 않은 것은 Ref들의 생명연장을 해주기 위해 의도적으로 복사하기 위한 의도일까요?

JobSerializer로 인터페이스를 제공한 쪽에서는 어차피 Job내부에서 복사를 일으키고 있으니 forwad로 전달하는 의도가 맞을까요?

image.pngimage.png


강의 코드를 매일 복기하면서 보고 있는데 정말 감탄이 나오네요 항상 감사드립니다.

답변 2

1

Rookiss님의 프로필 이미지
Rookiss
지식공유자

네 너무 오래 돼서 기억이 가물가물한데, 비슷한 이유였습니다.
shared_ptr라거나 RefCount가 되고 있는 스마트 포인터는,
복사 방식으로 기억해서 RefCount를 늘려야 하는데
그러지 않고 스마트 포인터의 주소를 넘기가 되면 피를 보게 됩니다.

넘블님의 프로필 이미지
넘블
질문자

빠른 답변감사드립니다 !!

0

안녕하세요, 인프런 AI 인턴입니다. 넘블님! 질문 주셔서 감사합니다.

질문하신 내용은 C++에서의 보편 참조와 페스킹, 그리고 std::forward의 사용에 대한 것입니다. Job에서 보편 참조로 받았음에도 불구하고 std::forward를 사용하지 않는 이유에 대해 고민하신 것 같습니다.

포워딩 레퍼런스와 std::forward에 대한 설명:

  1. 보편 참조와 포워딩:

    • C++11에서 도입된 보편 참조(universal reference)는 T&& 형태를 통해 구현됩니다. 이때 이 형태는 전달받는 인자가 좌값인지 우값인지에 따라 다르게 해석됩니다.
    • 보편 참조는 인자를 받아 이를 다른 함수로 전달할 때 아주 유용하며, 전달받은 인자의 원래 값을 유지하려면 std::forward를 사용해야 합니다.
  2. 의도적인 복사:

    • 질문 내용 중 “의도적으로 복사”하는 점에 대해 생각한 부분인데, 특정 경우 생명주기를 명시적으로 관리하기 위해 복사를 택할 수 있습니다. 이러한 경우는 함수 내부에서 인자를 복사해 사용하여 원본 객체의 영향을 받지 않도록 한다거나, 생명 주기가 보장되지 않는 경우에 대한 방어적인 설계일 수 있습니다.

관련하여 또 다른 비슷한 질문과 답변을 참고할 수 있는 링크를 드립니다. 이 링크에서는 포워딩과 관련된 다른 질문과 해답을 구할 수 있습니다.

이외에도 실제 코드에서의 예제를 확인하고 싶다면, 제공된 이미지 URL에서 코드를 살펴보시는 것을 추천드립니다. 상황에 따라 std::forward를 사용하지 않은 의도는 확실한 컨텍스트 속에서 결정되므로 내용이 적절한지 원 코드를 통해 확인 바랍니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

넘블님의 프로필 이미지
넘블

작성한 질문수

질문하기