2013-05-29 2 views
3

클래스 앞에 #pragma pack()을 사용할 수 있습니까?클래스에 #pragma pack 사용

여기서 pragma의 의미는 무엇입니까? 컴파일러에게 구현과 관련하여 정보를 제공하는 데 사용된다는 것은 알고 있지만 클래스와 함께 사용하면 어떨까요?

답변

6

정확한은 구조체에서와 마찬가지로 클래스에서 동일한 효과를 가지며 데이터 멤버의 정렬에 영향을줍니다.

실제로 수업에서 사용하는 것은 매우 드문 일이며 거의 항상 실수입니다. C++ 클래스 객체의 레이아웃은 많이 정의 된 구현입니다. C++ 컴파일러는 대개 가능한 경우 v 테이블 포인터를 삭제하여 레이아웃을 최적화하기 위해 노력합니다. 그리고 클래스가 다중 상속을 사용할 때 잠재적으로 하나 추가. 메서드를 가상으로 만들거나 기본 클래스를 추가하는 등 클래스 선언을 약간 변경하면 개체 레이아웃이 크게 변경 될 수 있습니다. 그러면 당연히 그 pragma에 의존하는 코드를 깨뜨릴 것입니다. 바이너리 파일에 직렬화 된 객체가 더 이상 올바르게 직렬화되지 않습니다. 일반적으로 나쁜 습관이 있지만 어쨌든 항상 발생합니다. 사용하지 마십시오.