생성자에서 동적할당한건 소멸자에서 해제하면 될텐데 생성자가 아닌 곳에서 동적할당 한 것인데 할당해제할 시기가 마땅치 않은 경우 창이 닫히기 전에 해제하면 다음과 같이 해제하면 메모리 누수를 막을 수 있다.
프로젝트 - 클래스 마법사
해당되는 다이얼로그에서 메시지, WM_DESTORY 를 추가한다.
아래와 같이 OnDestory() 함수 안에 new 로 동적할당 한 것을 모두 delete 하는 코드를 추가한다.
큰 의미는 없지만 delete 후에 .clear() 까지 해줬다.
void CCarAccidentListDlg::OnDestroy()
{
if (DC.getList().size() != 0)
{
for (int i = 0; i < DC.getList().size(); i++)
{
delete DC.getList().at(i);
}
DC.getList().clear();
}
CDialogEx::OnDestroy();
}
버튼을 눌렀을 때 동적할당하도록 이벤트 처리기를 구성했다면 두 번 동적할당 하지 않도록 방지하는 코드도 넣는다.
void DataController::loadListFromFile()
{
ifstream data("ANSIData.csv");
string line;
if(list.size()!=0)
{
return;
}
while (getline(data, line))
{
stringstream linestream(line);
string cell[COLUMN_NUMBER];
for (int j = 0; j < COLUMN_NUMBER; j++)
{
getline(linestream, cell[j], ',');
}
list.push_back(new Data(cell[0], cell[1], &cell[2]));
}
}
나는 벡터의 사이즈가 0이 아닐 땐 바로 리턴하도록 했다.
'프로그래밍 > MFC (C++)' 카테고리의 다른 글
MFC ] 통계자료, 스레드 Thread 를 사용하여 로드하기 (0) | 2022.07.09 |
---|---|
MFC ] 통계자료, 자식 다이얼로그 생성하고 부모 다이얼로그와 상호참조하기 (0) | 2022.07.08 |
MFC ] CString -> string 변환, string-> CString 변환 (0) | 2022.07.04 |
MFC ] 통계 데이터 List Control (리스트 컨트롤) 에 로드하기 (2) | 2022.07.04 |
MFC ] Class 를 이용한 음료수 자판기 (0) | 2022.07.04 |