$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Jeff Flinn (TriumphSprint2000_at_[hidden])
Date: 2004-04-23 13:36:53
The following code produces and access violation when loading the NULL
shared_ptr. Is this an issue of not having registered the type pointed to?
What would I need to do to appropriately handle this situation?
#include <boost/serialization/shared_ptr.hpp>
#include <boost/serialization/string.hpp>
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/archive/binary_oarchive.hpp>
#include <boost/archive/binary_iarchive.hpp>
#include <boost/archive/xml_oarchive.hpp>
#include <boost/archive/xml_iarchive.hpp>
#include <fstream>
typedef std::string tName;
class PointedToClass
{
   tName mName;
   friend class boost::serialization::access;
   template< class Archive >  void serialize( Archive &ar, unsigned int
version )
   {
      ar & boost::serialization::make_nvp( "Name", mName );
   }
public:
   ~PointedToClass(){}
    PointedToClass():mName("def"){}
};
typedef boost::shared_ptr<PointedToClass> tPtr;
class SomeClass
{
   tName mName;
   tPtr  mPtr;
   friend class boost::serialization::access;
   template< class Archive >  void serialize( Archive &ar, unsigned int
version )
   {
      ar & boost::serialization::make_nvp( "Name", mName );
      ar & boost::serialization::make_nvp(  "Ptr", mPtr  );
   }
public:
   SomeClass():mName("abc"),mPtr(){}
};
int main( int argc, char* argv[] )
{
   SomeClass lSomeClass;
   {
      std::ofstream lOut( "SomeClass.archive", std::ios_base::out |
std::ios_base::trunc );
      if( lOut.good() )
      {
         boost::archive::xml_oarchive oa( lOut );
         oa & boost::serialization::make_nvp( "SomeClass", lSomeClass );
      }
   }
   {
    std::ifstream lIn( "SomeClass.archive" );
    if( lIn.good() )
    {
         boost::archive::xml_iarchive ia( lIn );
         ia & boost::serialization::make_nvp( "SomeClass", lSomeClass );
    }
   }
   return 0;
}