需要澄清 boost::optional 类型

Need clarification on boost::optional type

我试图从核心文件中获得的关于 boost::optional 类型变量的一些细节中弄明白。

变量:

boost::optional<Cacher> cacher_;

来自核心的第 5 帧:

(gdb) p this->cacher_
 = 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_ 的结果,对象会被销毁吗?

如果诊断问题的详细信息不足,我们深表歉意。我会尝试根据回复提供更多详细信息。

谢谢!

是的,boost::optional 跟踪它是否持有有效对象。这可以通过使用 operator bool()is_initialized().

来检查

如果您分配 boost::none(或调用 .reset()),它将正确销毁它持有的对象,如果有的话。

std::optional 也是如此(据我所知,boost::none 赋值除外)。