2009. 9. 15. 12:43

가변 길이 구조체

구조체중에,



와 같이, 끝에 BYTE 버퍼 형태의 [1]로 된 array로 구성된것이 있습니다.
이는, 가변 길이를 쉽게 하기 위한 트릭을 이용한 것이죠.

만약,

와 같이, 끝에 lpszName이 온다면 어떻게 될까요?

pstTest1에 pstTest2를 동적할당하여 copy하는 것이 좋은 예가 될 수 있습니다.

ST_TEST로 되어 있는 경우에는, 그냥,

가 가능하지만,

ST_TEST_PTR로 되어 있는 경우에는,

로 됩니다.

과연, 어떤것이 쉬울까요?
물론, ST_TEST가 훨씬 쉬워 보이지만, 익숙하지 않은 사람들에게는 힘들수도 있습니다.
이것은 옛날 C에서 많이 사용되는 tric으로,
C++에서는 되도록,
ST_TEST_PTR 형태의 class를 만들어, copy constructor, assign operator overloadding을 이용해
직관성을 높여서 구현하기도 합니다.

허나, C를 써야 하는 환경(native api)에서는 C++이 사용되지 않음으로, ST_TEST 형태의 구조체에
익숙해 져야 합니다.

참고로,
ST_TEST_PTR stTemp = {0,};
이 가능하지만,
ST_TEST stTemp = {0,}; 은 의미가 없습니다.

LPST_TEST pstTemp = NULL;
pstTemp = new BYTE[바이트];
pstTemp->dwCbLength = 바이트;
형태만 유효합니다.