需要澄清 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
的析构函数的地方,崩溃是因为对象持有的内存已经被释放
我的问题:
- 是否
boost::optional
表示cacher_
持有的内存有效?
- 作为将
boost::none
分配给 cacher_
的结果,对象会被销毁吗?
如果诊断问题的详细信息不足,我们深表歉意。我会尝试根据回复提供更多详细信息。
谢谢!
是的,boost::optional
跟踪它是否持有有效对象。这可以通过使用 operator bool()
或 is_initialized()
.
来检查
如果您分配 boost::none
(或调用 .reset()
),它将正确销毁它持有的对象,如果有的话。
std::optional
也是如此(据我所知,boost::none
赋值除外)。
我试图从核心文件中获得的关于 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
的析构函数的地方,崩溃是因为对象持有的内存已经被释放
我的问题:
- 是否
boost::optional
表示cacher_
持有的内存有效? - 作为将
boost::none
分配给cacher_
的结果,对象会被销毁吗?
如果诊断问题的详细信息不足,我们深表歉意。我会尝试根据回复提供更多详细信息。
谢谢!
是的,boost::optional
跟踪它是否持有有效对象。这可以通过使用 operator bool()
或 is_initialized()
.
如果您分配 boost::none
(或调用 .reset()
),它将正确销毁它持有的对象,如果有的话。
std::optional
也是如此(据我所知,boost::none
赋值除外)。