start_lifetime_as — std::start_lifetime_as
start_lifetime_as — std::start_lifetime_as
std::start_lifetime_as는 C++20에 std::start_lifetime_as로 도입된 함수(또는 placement new의 일반화)로, 메모리 공간에 특정 타입의 객체 수명을 시작시키는 기능을 나타내요. 다만 실제로 start_lifetime_as라는 표준 함수는 C++23에서 도입됐어요. <memory> 헤더에 제공돼요.
이 함수는 주어진 메모리 영역에서 타입 T의 객체 수명을 명시적으로 시작시켜, 형변환 없이 그 타입으로 취급할 수 있게 해요. 저수준 메모리 재사용 코드에서 유용해요.
출처: cppreference
본문
std::start_lifetime_as는 메모리 구간에서 타입 T 객체의 수명을 시작시켜요.
template<class T>
T* start_lifetime_as(void* p) noexcept;
p가 가리키는 저장 공간(대개 바이트 배열이나 재사용된 메모리)에서 T 타입 객체의 수명을 시작시켜, 그 객체에 대한 유효한 포인터를 반환해요. 기존 내용은 파괴되지 않고 새로운 타입으로 "해석"되어, 암묵적 수명(implicit lifetime) 타입이 아닌 타입에도 안전하게 재사용할 수 있게 해줘요.
이것은 "바이트 버퍼를 특정 타입으로 안전하게 재사용"(예: 임의의 시점에 객체 수명을 명시적으로 시작)해야 하는 저수준 코드, 특히 프로토콜 파싱·스토리지 재사용에서 유용해요. T 객체의 수명이 시작되면 T*로 접근할 수 있어요.
이 기능은 메모리 모델에서 객체 수명을 명시적으로 시작시키는 메커니즘의 일부예요. 잘못 사용하면 정의되지 않은 동작이 될 수 있으므로 주의해야 해요.