간단한 게임 엔진에는 엔티티에 대한 포인터가 들어있는 벡터가 있습니다. 각 엔티티는 new 키워드로 할당됩니다.벡터의 객체를 올바르게 삭제하는 방법
vector<Entity*>::iterator iter;
for (iter = gameEntitys.begin(); iter != gameEntitys.end();) {
delete (*iter);
++iter;
}
하지만 지금은 끔찍한 메모리 누수 모든 프로파일 링 도구 지점이 내 실체에 함수를 호출하기 위해 내가 지금처럼뿐만 아니라 반복자를 사용하는 거라고 나는 반복자를 사용하여 내 엔티티를 삭제할 때 그래서 나는 생각 라인쪽으로 delete (*iter);
명백하게 뭔가 잘못되었지만 벡터에 포함 된 엔티티를 삭제하고 다른 장면의 벡터를 지우는 올바른 방법은 무엇입니까? gameEntitys.clear();
을 사용하면 실제 데이터가 아니라 포인터이기 때문에 벡터에서 실제로 delete를 호출하지 않는 요소 만 제거하므로 유용하지 않습니다.
편집 : 나는 의견을 보았습니다. Entity 클래스는 다형성이 아니며 하위 클래스가 없습니다. 동적 메모리 사용을 중단하고 포인터가 아닌 엔티티 배열이 정상적인 경우 더 유용할까요?
메모리 누수가있는 이유는 응용 프로그램이 시작될 때 메모리 사용이 충돌하기 전에 최대 2GB까지 촬영하기 때문입니다.
이것은 'unique_ptr'이 무엇을위한 것입니까? – dasblinkenlight
어떻게 메모리 누수가 있다고 판단 했습니까? 표시 한 코드는'gameEntitys' 객체에있는 모든 포인터를 삭제합니다. 그 일을 한 후에는 물론 '취소'해야합니다. –
그리고 하나의 'Entity'를 삭제하고 메모리 누수를 확인 했습니까? – Beta