엔진프로그래밍

[메모리관리] 전방선언 잘 사용하기

doyyy_0 2025. 10. 9. 09:49

전방선언을 사용하는 이유는 많지만 원리는 일단 선언해놓고 돌아가게하고 실행시에 전방선언된 것의 전체 정의를 가져다가 쓰겠다 라는 의미이다. 보통 헤더파일에 불필요하게 #include말고 cpp파일에 #include해서 코드 수 자체를 줄이려는 의도로 많이쓰인다.

그런데 예를들어 다음과 같이 그런의도가 아닌경우도 있다.

class Animation;
struct MeshDataInfo {
	MeshData* meshes = nullptr;  
	UINT meshCount = 0;      
	Animation* m_animations = nullptr;
	UINT animationCnt = 0;..

 

Animation*이거 하나를 넣으려고 #include "Animation.h"하기에는 좀 치졸하다. 그래서 전방선언 했는데 이걸 해제하려고 하는 Model.cpp에서 

Model::~Model()
{
	if (m_animations)
	{
		delete[] m_animations;
		m_animations = nullptr;
	}

}

이렇게 하니 자꾸 메모리 해제시 crack된다. 이유는 Model.cpp파일에 #include "Animation.h"를 안해서 전방선언된 걸로만 메모리크기를 잡아서 제대로 메모리를 해제시키지 못하는 것이다. 이게 잘 작동되게하려면 Model.cpp파일에도  #include "Animation.h"를 넣어서 Animation의 크기를 제대로 잡아줄 필요가 있다