У меня есть метод выше, который сериализует общий класс.std :: bad_alloc on boost :: archive :: binary_iarchive
std::unique_ptr<Message> Serializer::deserialize(char* data , int size) {
std::stringstream ss(std::ios_base::in |
std::ios_base::out |
std::ios_base::binary);
ss.write(data, size);
Message *in;
boost::archive::binary_iarchive ia(ss, boost::archive::no_header);
ia >> in;
return std::unique_ptr<Message> (in);
}
Я получаю
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
, когда я пытаюсь вызвать десериализации на символ *, который я уверен, отправляется одно целое. Класс, который я пытаюсь десериализации, чтобы можно найти здесь:
class DiscoveryMessage : public Message {
public:
DiscoveryMessage() {}
DiscoveryMessage(int tcpPort);
virtual ~DiscoveryMessage(){}
friend class boost::serialization::access;
private:
template <class Archive>
void serialize(Archive &ar, const unsigned int) {
// invoke serialization of base class (Message)
ar & boost::serialization::base_object<Message>(*this);
ar & mTcpReceivePort;
ar & mIPAddr;
}
int mTcpReceivePort;
std::string mIPAddr;
};