【发布时间】:2020-11-09 13:43:21
【问题描述】:
我有一个 vector<unique_ptr<BaseClass>>,我正在通过调用 vec.push_back(std::make_unique<DerivedClass>()) 向其中添加新项目。
如何使用operator bool() 检查nullptr?
我尝试直接使用vec.back(),像这样:
if((!vec.empty() && vec.back())
{
// yay!
}
else
{
//nay!
}
但无论指针的内容如何,它总是返回 false。
【问题讨论】:
-
您能否尝试创建一个minimal reproducible example 向我们展示,我们可以尝试自己调试吗?谈到调试,您有尝试过自己调试吗?
-
std::make_unique()永远不会返回包含nullptr的std::unique_ptr。但是if (vec.back())将调用unique_ptr::operator bool就好了,假设vec不为空(否则调用back()是未定义的行为)。所以无论你遇到什么问题都在你没有显示的代码中。 -
谢谢!我会接受你的评论作为答案。我发现错误的代码很可能与这个问题无关。
标签: c++ pointers c++14 smart-pointers stdvector