需要澄清boost::可选类型
Need clarification on boost::optional type
我正试图从核心文件中获得关于boost::可选类型变量的一些细节。
变量:
boost::optional<Cacher> cacher_;
Frame #5 from core:
(gdb) p this->cacher_
$1 = boost::optional
在这一帧中执行的行是:
cacher_ = boost::none;
因此,导致崩溃的几个帧指向boost库代码:
#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 是否有按特殊类型值编码状态"compact optional"?
- 像union_这样的 Boost.Geometry 操作如何处理浮点类型的基本不精确性?
- 来自 Android 应用程序内部的 boost 类型的 boost::wrapexcept<boost::system::system_error> 的未捕获异常
- 使用 Boost.Spirit 解析具有混合数据类型的 OBJ 文件?
- 使用自定义访问者时具有自定义类型的提升变体失败(源自 boost::static_visitor)
- 在其他容器中使用 boost::container::static_vector 时,GCC 编译错误"将'const s'绑定到类型's&'的引用丢弃限定符"
- Boost.Python :C++模板类型匹配的嵌套命名空间
- 我正在将一个 std::string 传递给一个 boost 函数,该函数对该类型进行常量引用,但该值发生了变化
- Boost.Hana:在 constexpr 上下文中将值元组转换为相应类型的元组
- 如何在Boost::program_options配置文件中为非字符串的自定义选项值类型处理空格
- 从具有部分专用化的boost:hana::set中提取类型失败
- boost odeint 中的受控误差步进器是否支持复杂的数据类型?
- boost::p rogram_options 验证每个参数而不是每个参数类型?
- 如何正确使用带有公共成员变量的类型 boost::可选?
- 无法解析类型 "boost::filesystem::path"
- 提升序列化提供未定义的类型'boost::STATIC_ASSERTION_FAILURE'
- C++ Boost - 未找到采用类型 'boost::filesystem::path' 的右操作数的运算符
- 无效使用不完整的类型boost function_traits
- C++,Linux:错误:请求从"boost::<void>unique_future"转换为非标量类型"boost::shared_future<void>"。 如何绕过它?
- BOOST/CSTDINT类型BOOST稀疏向量数组失败,为什么