node 안에 있는 data 타입을 shared_ptr 로 하는 이유?
291
작성한 질문수 10
제 생각에는 락프리 스택 만들 때도 그렇고 이번 강의 큐도 그렇고 노드 안에 있는 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을 사용하는 구체적인 이유는 강사님께서 설명해주신 배경 지식이나, 특정 구현에 대한 선택의 결과일 수 있으니, 질문&답변 게시판이나 강의 내용을 다시 한 번 확인해 보시는 것도 좋을 것 같습니다.
Memory Pool에서 오버플로우 질문입니다.
0
63
2
포토폴리오 및 진로 관련하여 고민입니다.
0
112
1
포토폴리오 관련 고민입니다.
0
62
1
실무에서도 alloc, 스마트포인터 등을 구현해서 쓰는지 궁금합니다.
0
82
2
성능 테스트 결과
0
103
2
게임 서버 Stateful, Stateless 진로 고민
0
121
1
WaitOnAddress와 Sleep의 차이 질문
0
83
1
궁금한거 있습니다.
0
82
2
JobTimer 구동 스레드
0
107
2
TryPop() 동작 관련 질문
0
81
1
로드맵 C#서버 C++서버 방향성 질문
0
148
2
스레드 id를 출력할떄 메인스레드 id도 출력되나요?
0
73
1
생명주기를 위한 의도적 복사
0
86
2
락프리의 실무에서 사용 질문
0
139
2
32bit threadID와 16비트 상위 WriteFlag에 대해
0
101
2
mutex와 sleep 차이점
0
117
1
실무에서는 어떠한 코드 스타일을 사용하는지 궁금합니다
0
152
2
Stomp Allocator의 Release함수에 대한 질문입니다.
0
96
1
공부법 관련해서
0
183
2
MakeShared 함수 관련
0
114
1
지금까지 서버코어에서 만든 내용에 대해 궁금한 점이 있어서 질문 드립니다.
0
144
2
운영체제관련 질문입니다
0
131
1
send하려는 데이터 크기가 크면 memcpy에서 문제가 발생할 것 같습니다.
0
117
2
메모리 풀 질문있습니다.
0
124
1





