to_address — std::to_address
to_address — std::to_address
std::to_address는 포인터류(팬시 포인터) 객체에서 실제 원시 포인터(T*)를 얻는 도우미 함수예요. C++20에서 도입됐어요. <memory> 헤더에 제공돼요.
std::unique_ptr, std::shared_ptr 같은 스마트 포인터나 커스텀 팬시 포인터에서 실제 메모리 주소를 얻고 싶을 때 get() 대신 더 일반적으로 to_address를 쓸 수 있어요. 제네릭 코드에서 &*p와 동등하지만 더 안전하게 동작해요.
출처: cppreference
본문
std::to_address는 포인터류 객체에서 실제 포인터를 얻어요.
template<class T> constexpr T* to_address(T* p) noexcept;
template<class T> constexpr T* to_address(const Ptr& p) noexcept;
첫 번째 오버로드는 원시 포인터 p를 그대로 반환해요. 두 번째 오버로드는 Ptr 타입(팬시 포인터)에 대해 pointer_traits<Ptr>::to_address(p)를 호출하거나, 없으면 &*p의 동등 결과를 반환해요.
이 함수는 포인터를 "주소"로 다루는 제네릭 알고리즘(예: 포인터 산술, 메모리 복사)에서 팬시 포인터의 실제 주소를 얻는 데 유용해요. get()이 없는 커스텀 포인터에서도 동작하므로 범용적이에요.
같이 보기
std::addressofstd::pointer_traits