gc_declare_reachable

gc_declare_reachable (std::declare_reachable)

<memory> 헤더에 정의되어 있어요. 포인터 p가 참조하는 객체를 도달 가능(reachable)하다고 선언해요. 도달 가능한 객체는 그 포인터가 모두 파괴되어도 가비지 컬렉터가 삭제하지 않고, 누수 감지기도 누수로 간주하지 않아요. C++11부터 도입, C++23에서 제거됐어요.

출처: cppreference

본문

void declare_reachable( void* p );

(C++11부터, C++23에서 제거)

포인터 p가 참조하는 객체를 도달 가능하다고 선언해요. 도달 가능한 객체는 그것을 가리키는 포인터가 모두 파괴되어도 가비지 컬렉터가 삭제하지 않고, 누수 감지기도 누수로 간주하지 않아요.

객체는 여러 번 도달 가능으로 선언될 수 있어요. 이 경우 이 속성을 제거하려면 그만큼 std::undeclare_reachable을 호출해야 해요. 예를 들어 XOR 연결 리스트는 구현에서 가비지 컬렉션이 활성화되어 있으면 그 노드들을 도달 가능으로 선언할 필요가 있어요.

매개변수

  • p: 안전하게 파생된(safely-derived) 포인터 또는 널 포인터

반환값

없음.

예외

아무 것도 던지지 않아요.

주의 (Notes)

이 둘(declare_reachable/undeclare_reachable)은 GC 환경에서 포인터가 실제 객체 참조로 취급되어야 함을 알려주는 데 쓰였어요. C++23에서 제거됐으므로 새 코드에서는 std::atomic_ref 기반 기법 등 대안을 써요.

더 알아보기 (Learn more)

cppreference