gpt4 book ai didi

c++ - 如何检查std::unique_ptr是否为空(如果它位于std::vector中)?

转载 作者:行者123 更新时间:2023-12-01 14:37:11 35 4
gpt4 key购买 nike

我有一个vector<unique_ptr<BaseClass>>,并且正在通过调用vec.push_back(std::make_unique<DerivedClass>())向其中添加新项目。
如何使用nullptr检查operator bool()
我尝试直接使用vec.back(),如下所示:

if((!vec.empty() && vec.back())
{
// yay!
}
else
{
//nay!
}
但无论指针的内容如何,​​它始终返回false。

最佳答案

here可以看到,如果 vector 为空,则为UB。如果不是这种情况,则可以从here instead中读取,unique_ptr具有operator bool(),用于检查当前是否由unique_ptr管理对象
因此,具有:

vector.empty();
您可以检查 vector 是否包含元素,并使用:
vector<unique_ptr<something>> vec;
vec.push_back(make_unique<something>());
if(vec.front()){ // example
// do something
}
您检查第一个 unique_ptr是否指向一个对象。
PS:如果您始终使用 vec.push_back(std::make_unique<DerivedClass>()),则永远不会有保存 unique_ptrnullptr

关于c++ - 如何检查std::unique_ptr是否为空(如果它位于std::vector中)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62993136/

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