는 문자 배열입니다 저장된 객체를 가져 오는 것 :reinterpret_cast/static_cast 나는 원시 스토리지에서 일하고 있어요 변형 클래스에서 정의되지 않은 동작
template<class X>
const X &get()
{
// ...
return *reinterpret_cast<X *>(storage);
// ...
}
작동하는 것처럼 보이지만 항상 잘 정의되어 있습니까? 포인터를 역 참조하는 것이 걱정됩니다 (형식 앨리어싱 규칙에 의해 허용됩니까?).
https://stackoverflow.com/a/7321815/3235496 (James Kanze 님의 댓글 참조)
는 현재 구현 및
return *static_cast<const X *>(static_cast<const void *>(storage));
관련 질문/대답 사이가 어떤 차이가 있습니까. 문제가 발생할 수있는 곳 storage
으로 C++ When should we prefer to use a two chained static_cast over reinterpret_cast
확실하게이'new (storage) X (x);'는 메모리 누수입니다. –
@EdHeal 그것은 새로운 배치를 통해 저장소에 X를 만듭니다. 정렬 된 저장소의 경우 반드시 안전한 방법이어야합니다 (예 : http://stackoverflow.com/questions/4583125/char-array-as-storage-for- placement-new). 세부 사항을 추가 할 수 있습니까? – manlio