実行しているアプリケーションに問題があります。ブーストシリアル化を使用していくつかのパケットをシリアル化する必要があります。ドキュメントによると、BOOST_CLASS_EXPORT_KEY
それぞれBOOST_CLASS_EXPORT_IMPLEMENT
.hppファイルと.cppファイルを使用して、ポリモーフィックベースポインタを使用して派生クラスをシリアル化できます。
だからここに私が持っているものがあります:
.hpp:クラス宣言を含み、最後にBOOST_CLASS_EXPORT_KEY(mynamespace::mypacket)
.cpp:私のクラス定義とBOOST_CLASS_EXPORT_IMPLEMENT(mynamespace::mypacket)
この時点まではすべて正常に実行されますが、シリアル化する必要がある場合は、bad_allocエラーが発生します。
register_type<mypacket>()
使用する必要のあるアーカイブのメソッドを明示的に呼び出すことで、この問題を回避しました。
しかし、ここに私の質問があります:ブーストのEXPORT *は、register_typeメソッドの呼び出しを回避することを意味しますか、それとも私は何か間違ったことをしていますか?コードで同じ作業を2回行うような気がしますが、それ以上に、アーカイブでregister_typeを使用する必要がある場合は、エクスポートキーと実装を使用する利点がありません。
私はここや他の場所で他のいくつかの投稿を読みました。問題を実験したのは私だけではないようですが、まだ答えは見つかりませんでした。