std::shared_ptr<std::list<std::shared_ptr<Phone>>> phoneList; 如何遍历phoneList ?
时间: 2024-09-29 22:16:10 浏览: 60
c++11&14-智能指针要点汇总
要遍历`std::shared_ptr<std::list<std::shared_ptr<Phone>>>`类型的`phoneList`,你可以按照以下步骤操作:
1. 首先,确保`phoneList`不是空的(即它至少有一个元素)[^1],因为`shared_ptr`会自动管理内存生命周期,如果它指向的对象为空,那么它的`expired()`方法会返回`true`。
```cpp
if (!phoneList.empty()) {
// continue with the loop
}
```
2. 使用迭代器遍历`list`。由于`phoneList`实际上是一个共享所有权的链表,你可以通过`begin()`和`end()`方法获取迭代器范围:
```cpp
for (auto it = phoneList.begin(); it != phoneList.end(); ++it) {
// 处理每个 Phone 对象
auto phoneSharedPtr = *it;
if (!phoneSharedPtr.expired()) {
const Phone& phone = phoneSharedPtr.lock();
// 进一步访问 phone 对象的属性或调用其方法
std::cout << "Phone object: " << phone.getPhoneNumber() << std::endl;
}
}
```
这里的`lock()`函数用于获取`shared_ptr`所持有的实际对象,只有当`shared_ptr`非空且有效时才会成功。
阅读全文