boost::optional 型変数に関して、コア ファイルから取得したいくつかの詳細を理解しようとしています。
変数:
boost::optional<Cacher> cacher_;
コアからのフレーム #5:
(gdb) p this->cacher_
$1 = boost::optional
このフレームで実行されている行は次のとおりです。
cacher_ = boost::none;
その結果、クラッシュに至るまでのいくつかのフレームは、ライブラリ コードを後押しすることを示しています。
#1 0x000000000152f96c in destroy_impl (this=0x32557590) at /opt/include/boost/optional/optional.hpp:479
#2 destroy (this=0x32557590) at /opt/include/boost/optional/optional.hpp:439
#3 assign (this=0x32557590) at /opt/include/boost/optional/optional.hpp:313
#4 operator= (none_=NULL, this=0x32557590) at /opt/include/boost/optional/optional.hpp:615
フレーム #0 は のデストラクタCacher
が呼び出される場所であり、クラッシュはオブジェクトが保持するメモリが既に解放されているためです。
私の質問:
boost::optional
によって保持されているメモリcacher_
が有効であることを示していますか?boost::none
に割り当てた結果cacher_
、オブジェクトは破棄されますか?
問題を診断するための詳細が不十分な場合は、お詫び申し上げます。回答に基づいて、追加の詳細を提供しようとします。
ありがとう!