我试图从核心文件中获得的关于 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
to的结果cacher_
,对象会被销毁吗?
如果诊断问题的详细信息不足,请致歉。我将尝试根据回复提供更多详细信息。
谢谢!