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;는 편하긴 하지만, 명시적으로 쓰는 것이 더 안전한 습관이 될 수 있다.