본문 바로가기

프로그래밍 오류해결

STL 컨테이너 활용시 주의 사항

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;

}

};