gpt4 book ai didi

c++ - 测试 shared_ptr 是否为 NULL

转载 作者:可可西里 更新时间:2023-11-01 15:08:09 25 4
gpt4 key购买 nike

我有以下代码片段:

std::vector< boost::shared_ptr<Foo> >::iterator it;
it = returnsAnIterator();
// often, it will point to a shared_ptr that is NULL, and I want to test for that
if(*it)
{
// do stuff
}
else // do other stuff

我测试正确吗? boost 文档说 shared_ptr 可以隐式转换为 bool,但是当我运行这段代码时它会出现段错误:

Program received signal SIGSEGV, Segmentation fault.
0x0806c252 in boost::shared_ptr<Foo>::operator Foo*
boost::shared_ptr<Foo>::* (this=0x0)
at /usr/local/bin/boost_1_43_0/boost/smart_ptr/detail/operator_bool.hpp:47
47 return px == 0? 0: &this_type::px;

最佳答案

是的,您上面的代码是正确的。 shared_ptr 可以隐式转换为 bool 以检查是否为 null。

您遇到的问题是您的 returnAnIterator() 函数返回了一个无效的迭代器。可能它正在为某个容器返回 end(),这是一个 过去 容器的末尾,因此不能像您使用 * 那样取消引用它

关于c++ - 测试 shared_ptr 是否为 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3431855/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com