다음을 통해 공유


저장 하 고 보관 저장소를 통해 Cobjects를 로드 합니다.

저장 하 고 로드 CObject보관 저장소를 통해 추가 고려 사항이 필요 합니다.특정 한 경우에 호출 해야는 Serialize 함수는 개체의 위치는 CArchive 개체의 매개 변수입니다는 Serialize 호출을 사용 하 여 대조적으로 << 또는 >> 연산자의는 CArchive.기억해 야 할 중요 한 사실입니다는 CArchive>> 구문 연산자는 CObject 메모리 기반 CRuntimeClass 이전에 파일을 저장 보관 저장소가 작성 정보.

따라서 사용 여부는 CArchive<<>> 전화 비교 연산자 Serialize, 여부에 따라 달라 집니다를 해야 로드 보관 저장소 개체를 동적으로 재구성에 따라 이전에 저장 된 CRuntimeClass 정보.사용은 Serialize 함수에는 다음과 같은 경우:

  • 개체를 역직렬화 할 때 정확한 개체의 클래스를 미리 알아야.

  • 개체를 역직렬화 할 때 메모리 할당에 대 한 이미 있습니다.

주의 정보주의

사용 하 여 개체를 로드 하는 경우는 Serialize 함수를 사용 하 여 개체 저장 해야는 Serialize 함수.사용 하 여 저장 하지 않습니다는 CArchive<< 연산자 및 다음 로드를 사용 하는 Serialize 작동, 또는 사용 하 여 저장의 Serialize 작동 하 고 다음을 사용 하 여 로드 CArchive >> 연산자.

다음 예제는 경우를 보여 줍니다.

class CMyObject : public CObject
{
// ...Member functions
public:
   CMyObject() { }
   virtual void Serialize( CArchive& ar );

// Implementation
protected:
   DECLARE_SERIAL( CMyObject )
};


class COtherObject : public CObject
{
   // ...Member functions
public:
   COtherObject() { }
   virtual void Serialize( CArchive& ar );

// Implementation
protected:
   DECLARE_SERIAL( COtherObject )
};


class CCompoundObject : public CObject
{
   // ...Member functions
public:
   CCompoundObject();
   ~CCompoundObject();
   virtual void Serialize( CArchive& ar );

// Implementation
protected:
   CMyObject m_myob;    // Embedded object
   COtherObject* m_pOther;    // Object allocated in constructor
   CObject* m_pObDyn;    // Dynamically allocated object
   //..Other member data and implementation

   DECLARE_SERIAL( CCompoundObject )
};
IMPLEMENT_SERIAL(CMyObject,CObject,1)
IMPLEMENT_SERIAL(COtherObject,CObject,1)
IMPLEMENT_SERIAL(CCompoundObject,CObject,1)


CCompoundObject::CCompoundObject()
{
   m_pOther = new COtherObject; // Exact type known and object already 
            //allocated.
   m_pObDyn = NULL;    // Will be allocated in another member function
            // if needed, could be a derived class object.
}

CCompoundObject::~CCompoundObject()
{
   delete m_pOther;
}

void CCompoundObject::Serialize( CArchive& ar )
{
   CObject::Serialize( ar );    // Always call base class Serialize.
   m_myob.Serialize( ar );    // Call Serialize on embedded member.
   m_pOther->Serialize( ar );    // Call Serialize on objects of known exact type.

   // Serialize dynamic members and other raw data
   if ( ar.IsStoring() )
   {
      ar << m_pObDyn;
      // Store other members
   }
   else
   {
      ar >> m_pObDyn; // Polymorphic reconstruction of persistent object 
      //load other members
   }
}

Serializable 클래스에 포함 된 정의 하는 경우 요약에서 CObject 구성원으로 수행 해야 합니다 없습니다 사용는 CArchive<<>> 연산자를 해당 개체에 대 한 하지만 호출 해야는 Serialize 대신 작동 합니다.또한 포인터를 serialize 할 수 있는 클래스를 정의 하는 경우는 CObject (또는 파생 개체 CObject) 회원 하지만 구문으로이 다른 개체에는 자체 생성자도 호출 해야 Serialize.

참고 항목

개념

Serialization: 개체를 Serialize합니다.