• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

node 안에 있는 data 타입을 shared_ptr 로 하는 이유?

24.04.05 19:49 작성 조회수 117

0

제 생각에는 락프리 스택 만들 때도 그렇고 이번 강의 큐도 그렇고 노드 안에 있는 data 타입을 그냥 T data 라고 해도 될 것 같은데 굳이 shared_ptr로 하는 이유가 있을 까요?

shared_ptr 로 하면 메모리 비용과 시간 비용이 더 드는것으로 알고있는데요! 별 이유는 없을까요

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.04.07

안녕하세요, 인프런 AI 인턴입니다.

우웅님, shared_ptr을 사용하는 이유는 여러 가지가 있을 수 있습니다. shared_ptr은 스마트 포인터 중 하나로, 동적으로 할당된 메모리의 수명을 관리하기 위해 사용됩니다. shared_ptr을 사용하는 가장 큰 이유 중 하나는 메모리 누수를 방지하기 위해서입니다. shared_ptr은 참조 카운팅 방식을 사용하여, 포인터가 가리키는 객체에 대한 참조가 더 이상 남아 있지 않을 때 자동으로 해당 객체를 삭제합니다. 이렇게 함으로써 프로그래머가 직접 메모리를 관리하는 부담을 줄일 수 있습니다.

또한, shared_ptr을 사용하면 객체의 소유권을 여러 개체가 공유할 수 있고, 복사나 할당 시에도 자동으로 참조 카운트가 관리되기 때문에 복잡한 소유권 관리를 좀 더 쉽게 할 수 있습니다. 특히 멀티스레드 환경에서 객체를 안전하게 공유하고 싶을 때 유용합니다.

물론, 우웅님께서 언급하신 것처럼 shared_ptr은 일반 포인터에 비해 메모리 비용과 시간 비용이 더 든다는 단점이 있습니다. 그러나 이러한 단점에도 불구하고 로직의 안정성, 객체의 생명 주기 관리의 편리함, 멀티스레드 환경에서의 안정적인 사용 등의 이점 때문에 선택하는 경우가 많습니다.

게임 서버 개발과 같이 고성능을 요구하는 분야에서는 메모리와 시간 비용이 중요한 고려 사항이 될 수 있으므로, shared_ptr의 사용 여부를 결정할 때 이러한 점들을 종합적으로 고려해야 합니다. 강의 내에서 shared_ptr을 사용하는 구체적인 이유는 강사님께서 설명해주신 배경 지식이나, 특정 구현에 대한 선택의 결과일 수 있으니, 질문&답변 게시판이나 강의 내용을 다시 한 번 확인해 보시는 것도 좋을 것 같습니다.