0

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が呼び出される場所であり、クラッシュはオブジェクトが保持するメモリが既に解放されているためです。

私の質問:

  1. boost::optionalによって保持されているメモリcacher_が有効であることを示していますか?
  2. boost::noneに割り当てた結果cacher_、オブジェクトは破棄されますか?

問題を診断するための詳細が不十分な場合は、お詫び申し上げます。回答に基づいて、追加の詳細を提供しようとします。

ありがとう!

4

1 に答える 1