STL 컨테이너를 포함한 구조체가 있을 때, 해당 구조체를 초기화 하기 위해 ZeroMemory나, memset 을 이용하여 초기화를 시도하는 것은 큰 위험성을 가져올 수 있다.
Ex)
struct stData
{
int nA;
int nB;
char cA;
std::string strA;
};
stData stA;
ZeroMemory(&stA, sizeof(stData)); <- 위험..
그래서 아래와 같이 초기화를 할수 있는 별도의 함수를 제공하는것도 한가지 방법이다.
struct stData
{
int nA;
int nB;
char cA;
std::string strA;
stData() { Init(); }
~stData() { Init(); }
void Init()
{
nA = 0;
nB = 0;
cA = 0;
strA = "";
}
};
또한 구조체간 값을 할당하기 위해 memcpy를 이용하여 값을 복사하는 행위도 위험하다.
때문에 위 초기화 함수처럼 별도의 Copy() 함수를 제공하여 멤버간 할당해주는 기능을 제공해주면 좋다.
struct stData
{
int nA;
int nB;
char cA;
std::string strA;
stData() { Init(); }
~stData() { Init(); }
void Init()
{
nA = 0;
nB = 0;
cA = 0;
strA = "";
}
void Copy(const stData &Src)
{
nA = Src.nA;
nB = Src.nB;
cA = Src.cA
strA = Src.strA;
}
};