- CObject 클래스 Clone 기능 추가.
// CObject.cpp
CObject::CObject(const CObject& obj)
: m_strName(obj.m_strName)
, m_ptPos(obj.m_ptPos)
, m_ptSize(obj.m_ptSize)
, m_pCollider(nullptr)
, m_bDelete(false)
{
// 깊은 복사를 위해 콜라이더가 존재하면 새로 생성.
if (obj.m_pCollider)
{
// 복사 생성자를 사용하여 콜라이더 복사.
m_pCollider = new CCollider(*obj.m_pCollider);
m_pCollider->m_pOwner = this;
}
}
자동 생성된 복사 생성자는 shallow copy 에 의해 m_pCollider 를 공유하는 문제가 발생함. 그래서 복사 생성자를 직접 정의해줘야 함.
// CObject.h
#pragma once
class CCollider;
class CObject
{
...
public:
...
virtual CObject* Clone() PURE;
...
CObject(const CObject& obj);
};
추가로 Clone 함수를 순수 가상 함수로 걸어줌.
이렇게 함으로써 CObject 를 상속하는 모든 클래스에 대해 Clone 함수의 구현을 강제하고, 이에 따라 복사 생성자에 대한 구현을 직접 할지, 자동 생성되는 것을 사용할지 생각을 해볼 수 있음.
- Animator 클래스 설계 준비.
// CAnimator.h
#pragma once
#include "CComponent.h"
class CObject;
class CAnimation;
class CAnimator : public CComponent
{
private:
map<wstring, CAnimation*> m_mapAnimations; // 애니메이션들을 이름으로 관리하는 맵.
CObject* m_pOwner;
public:
void CreateAnimation();
void FindAnimation();
void PlayAnimation();
public:
CAnimator();
~CAnimator();
friend class CObject;
};
딱히 중요한 구현은 없었음. 그냥 CAnimator 클래스랑 CAnimation 클래스 생성해둠.
추가로 범용 함수로 SafeDeleteMap 함수도 만들었는데, 이건 CTexture 클래스에서 소멸자를 private 으로 해놔서 컴파일할 수가 없음. 이걸 어떻게 해결할지는 다음 강의를 봐야겄다 ㅇㅅㅇ.
'Win32 api' 카테고리의 다른 글
| Win32 api 강의 39 - 40화. (0) | 2025.09.22 |
|---|---|
| Win32 api 강의 37 - 38화. (0) | 2025.09.22 |
| Win32 api 강의 34화. (0) | 2025.09.20 |
| Win32 api 강의 31 - 33화. (0) | 2025.09.19 |
| Win32 api 강의 29 - 30화. (0) | 2025.09.18 |