전방선언을 사용하는 이유는 많지만 원리는 일단 선언해놓고 돌아가게하고 실행시에 전방선언된 것의 전체 정의를 가져다가 쓰겠다 라는 의미이다. 보통 헤더파일에 불필요하게 #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의 크기를 제대로 잡아줄 필요가 있다
'엔진프로그래밍' 카테고리의 다른 글
| 3ds max sdk learning path 버전 문제 (0) | 2025.10.20 |
|---|---|
| 3ds max sdk plug-in wizard visual studio에서 안보일때 (0) | 2025.10.18 |
| [DX12] 하나의 모델을 여러개 그릴 때, 인스턴싱 기능 쓸 지 안 쓸지 구분 (0) | 2025.09.14 |
| [매크로 충돌 제거] 디버깅누수 new 매크로와, Assimp new매크로 (0) | 2025.09.06 |
| [lib,dll] 외부 라이브러리(Assimp)이용 시 lib와 dll개념 (0) | 2025.09.05 |