작성
·
210
0
제 생각에는 락프리 스택 만들 때도 그렇고 이번 강의 큐도 그렇고 노드 안에 있는 data 타입을 그냥 T data 라고 해도 될 것 같은데 굳이 shared_ptr로 하는 이유가 있을 까요?
shared_ptr 로 하면 메모리 비용과 시간 비용이 더 드는것으로 알고있는데요! 별 이유는 없을까요
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
우웅님, shared_ptr
을 사용하는 이유는 여러 가지가 있을 수 있습니다. shared_ptr
은 스마트 포인터 중 하나로, 동적으로 할당된 메모리의 수명을 관리하기 위해 사용됩니다. shared_ptr
을 사용하는 가장 큰 이유 중 하나는 메모리 누수를 방지하기 위해서입니다. shared_ptr
은 참조 카운팅 방식을 사용하여, 포인터가 가리키는 객체에 대한 참조가 더 이상 남아 있지 않을 때 자동으로 해당 객체를 삭제합니다. 이렇게 함으로써 프로그래머가 직접 메모리를 관리하는 부담을 줄일 수 있습니다.
또한, shared_ptr
을 사용하면 객체의 소유권을 여러 개체가 공유할 수 있고, 복사나 할당 시에도 자동으로 참조 카운트가 관리되기 때문에 복잡한 소유권 관리를 좀 더 쉽게 할 수 있습니다. 특히 멀티스레드 환경에서 객체를 안전하게 공유하고 싶을 때 유용합니다.
물론, 우웅님께서 언급하신 것처럼 shared_ptr
은 일반 포인터에 비해 메모리 비용과 시간 비용이 더 든다는 단점이 있습니다. 그러나 이러한 단점에도 불구하고 로직의 안정성, 객체의 생명 주기 관리의 편리함, 멀티스레드 환경에서의 안정적인 사용 등의 이점 때문에 선택하는 경우가 많습니다.
게임 서버 개발과 같이 고성능을 요구하는 분야에서는 메모리와 시간 비용이 중요한 고려 사항이 될 수 있으므로, shared_ptr
의 사용 여부를 결정할 때 이러한 점들을 종합적으로 고려해야 합니다. 강의 내에서 shared_ptr
을 사용하는 구체적인 이유는 강사님께서 설명해주신 배경 지식이나, 특정 구현에 대한 선택의 결과일 수 있으니, 질문&답변 게시판이나 강의 내용을 다시 한 번 확인해 보시는 것도 좋을 것 같습니다.