4.3 참조된 데이터 처리
지금까지의 작업으로 직렬화 코드가 이제 모든 종류의 원시 자료형과 POD7 자료형을 처리할 수 있게 되었지만, 아직 포인터나 컨테이너 등 간접 참조 데이터는 처리하지 못한다. RoboCat 클래스를 다음 코드로 다시 살펴보자.
class RoboCat : public GameObject { public: RoboCat() : mHealth(10), mMeowCount(3), mHomeBase(0) { mName[0] = '\0'; } virtual void Update(); void Write(OutputMemoryStream& inStream) const; void Read(InputMemoryStream& inStream); private: int32_t mHealth; int32_t mMeowCount; GameObject* mHomeBase; char mName[128]; std::vector<int32_t> mMiceIndices; Vector3 mPosition; Quaternion mRotation; };
현재 버전의 메모리 스트림 구현으로 아직 직렬화할 수 없는 복합 멤버 변수가 두 개 있는데, mHomeBase와 mMiceIndices가 그것이다. 이를 처리하기 위해서는 다음 절에서 논의할 다른 접근 방법이 필요하다.
7 역주 POD: plain old data. 순수하게 원시 자료형과 다른 POD로만 구성된 자료형. 멤버 함수가 있어도 상관없으나 포인터나 가상 함수가 있어선 안 된다. stl vector나 string은 POD가 아니므로 이런 것들이 포함되어선 안 된다. 예를 들면 Vector3 같이 주로 값만 담고 있는 자료형을 POD로 분류할 수 있겠다. POD는 메모리 레이아웃이 단순하므로 쉽게 복사할 수 있다.