std :: tr1 :: aligned_storage의 기본 사용법은 무엇입니까? 아래처럼 Foo 데이터 타입의 자동 메모리로 사용할 수 있습니까? 그렇다면aligned_storage의 기본 용도는 무엇입니까?
struct Foo{...};
std::tr1::aligned_storage<sizeof(Foo)
,std::tr1::alignment_of<Foo>::value >::type buf;
Foo* f = new (reinterpret_cast<void*>(&buf)) Foo();
f->~Foo();
,
std::tr1::aligned_storage<5*sizeof(Foo)
,std::tr1::alignment_of<Foo>::value >::type buf;
Foo* p = reinterpret_cast<Foo*>(&buf);
for(int i = 0; i!= 5; ++i,++p)
{
Foo* f = new (p) Foo();
}
는 유효 프로그램은 무엇입니까의 버피와 같은 여러 푸를 저장에 대해? 거기에 다른 유스 케이스가 있습니까? Google 검색은 aligned_storage에 대한 설명서 만 제공하지만 사용법은 거의 없습니다.
좋은 해결책입니다. static_cast와 void * 사이의 상관 관계는 정상이지만 static_cast와 같은 여러 static_cast에 대해서도 마찬가지입니다. (static_cast (x)) 여기서 x는 유형이 있습니까? 그렇다면 더 안전한 느낌을주기 위해 reinterpret_cast가 아닌 2 개의 static_cast로 X 유형의 모든 캐스트를 Y 유형으로 바꿉니다. (GCC & MSVC 9 컴파일러는 reinterpret_cast에 아무런 해를 끼치 지 않지만 다른 유청은 그렇게 할 것이라고 확신하지는 않습니다.)하지만보다 안전한쪽으로 가고 싶습니다 :) –
abir
예, reinterpret이 실제로 문제가되는 컴파일러에 대해 알고있다. (그리고 나는 C++ 0x에서 기대했던 것처럼 동작하도록 만들 것이라고 생각한다.) 그러나 표준에 따르면, 정의되지 않은 동작이다. static_cast 트릭은 모든 포인터 유형에서 작동해야합니다. – jalf
'템플릿 T pointer_cast (void * p) {return static_cast (p); }'. 즉, const 과부하 버전 ('const void * p')을 더하면 입력을 줄일 수 있습니다. Boost는'static_pointer_cast'와'dynamic_pointer_cast' 같은 기능을 가지고 있습니다. –