2013-05-06 94 views
0

我试图弄清楚为什么这段代码 会在启动函数返回0时崩溃,boost xml_iarchive当析构函数被调用时崩溃

我怀疑当它从启动函数返回时,它会调用 析构函数为xml_iarchive并且它在那里失败。

xml_iarchive调用它的析构函数之前,是否必须调用flush或者某个函数来清理之前执行清理操作:。

我不知道,:)

// serialize 
class FileLayout 
{ 

private: 

    std::string m_name; 
    int m_datetime; 
    std::string m_version; 

    std::string m_clientpath; 
    int m_length; 

public: 

    FileLayout() 
    { 

    }; 

    FileLayout(std::string name ,int datetime, 
       std::string version, std::string clientpath, 
       int length) 
    { 
     m_name = name; 
     m_datetime = datetime; 
     m_version = version; 
     m_clientpath = clientpath; 
     m_length = length; 
    }; 

    // Allow serialization to access non-public data members. 
    friend class boost::serialization::access; 

    template<typename Archive> 
    void serialize(Archive& ar, const unsigned version) 
    { 
     ar & boost::serialization::make_nvp("Name", m_name); 
     ar & boost::serialization::make_nvp("DateTime", m_datetime); 
     ar & boost::serialization::make_nvp("Version", m_version); 
     ar & boost::serialization::make_nvp("ClientPath", m_clientpath); 
     ar & boost::serialization::make_nvp("Length", m_length); 
    } 

    // get 

    std::string name() 
    { 
     return m_name; 
    }; 

    int datetime() 
    { 
     return m_datetime; 
    }; 

    std::string version() 
    { 
     return m_version; 
    }; 

    std::string clientpath() 
    { 
     return m_clientpath; 
    }; 

    int length() 
    { 
     return m_length; 
    }; 

}; 


    int Start(std::string &data) // xml 
    { 
    // set filesize 
    // set name 
    boost::iostreams::basic_array_source<char> device(data.c_str(), data.size()); 
    boost::iostreams::stream<boost::iostreams::basic_array_source<char> > s(device); 
    boost::archive::xml_iarchive ia(s,boost::archive::no_header); 

    ia >> BOOST_SERIALIZATION_NVP(filelayout); 

    data.clear(); 

    return 0; // fails here 
    } 

回答

0

原来这是用包装有问题,我花了整整一天 在这个问题上