SBS아카데미/게임프로그래밍
[C++ - TIL] shared_ptr, 스레드, 네임스페이스
musukie
2025. 6. 30. 21:35
📘 TIL - C++ shared_ptr, 스레드, 네임스페이스
1. shared_ptr의 참조 카운트 증가 원인
- shared_ptr는 객체의 소유권을 여러 포인터가 공유하면서, 참조 카운트 기반으로 객체를 관리한다.
- shared_ptr<Character> warrior = make_shared<Character>();
shared_ptr<Character> priest = warrior;
→ 참조 카운트는 2가 됨. - 멤버 함수에서 shared_ptr를 멤버 변수에 저장하면 참조 카운트가 또 올라가 3이 될 수 있음.
- 순환 참조(shared_ptr → shared_ptr)가 생기면 메모리 누수 발생 가능.
- 해결책: weak_ptr 사용으로 순환 참조 차단.
2. for 루프에서 i++ 중복 사용 시 반복 횟수 감소
for (int i = 0; i < 5; i++) {
std::cout << "main thread" << std::endl;
// i++; // 이 부분은 제거해야 정상적으로 5번 반복합니다.
}
- 루프 내부에서도 i++를 하면, 한 루프당 i가 2씩 증가하여 총 3번만 출력됨 (0, 2, 4).
3. std::thread로 스레드 추가하기
- C++에서 스레드를 만들려면 <thread> 헤더와 std::thread 사용:
std::thread thread1(FunctionName);
- 스레드를 생성하면 반드시 join() 또는 detach() 호출해야 함.
- join() → 해당 스레드가 끝날 때까지 대기
- detach() → 스레드를 백그라운드로 분리 실행
- 아무것도 안 하면 → 런타임 예외 발생 (프로그램 크래시)
4. using namespace std;를 안 쓰면?
- cout, cin, endl 등은 std::cout, std::endl처럼 명시적으로 std::를 붙여야 함.
- 예:
std::cout << "Hello, world!" << std::endl;
💡 느낀 점
- shared_ptr는 편리하지만 참조 구조가 복잡해질 경우 주의 깊게 설계해야 한다.
- 스레드를 직접 다룰 때는 항상 join() 또는 detach()를 명확히 처리해야 안전하다.
- using namespace std;는 편하긴 하지만, 명시적으로 쓰는 것이 더 안전한 습관이 될 수 있다.