std::list存储std::unique_ptr,遍历访问指针的示例
时间: 2023-08-02 12:05:18 浏览: 190
当使用 `std::unique_ptr` 管理指针对象时,我们可以将其存储在 `std::list` 中,并通过 `std::list` 提供的迭代器来访问对象。
以下是一个示例代码,展示了如何使用 `std::unique_ptr` 存储指针对象,并遍历访问它们:
```c++
#include <iostream>
#include <memory>
#include <list>
class MyClass {
public:
MyClass(int value) : m_value(value) {}
void Print() { std::cout << "Value: " << m_value << std::endl; }
private:
int m_value;
};
int main() {
std::list<std::unique_ptr<MyClass>> myList;
// 向 list 中添加元素
myList.emplace_back(std::make_unique<MyClass>(10));
myList.emplace_back(std::make_unique<MyClass>(20));
myList.emplace_back(std::make_unique<MyClass>(30));
// 遍历访问指针对象
for (const auto& ptr : myList) {
ptr->Print();
}
return 0;
}
```
在上面的示例中,我们首先创建了一个 `std::list`,用于存储 `std::unique_ptr<MyClass>`。然后,我们通过 `emplace_back` 函数向 `list` 中添加了三个元素,每个元素都是一个指向 `MyClass` 对象的 `std::unique_ptr`。
最后,我们使用范围 `for` 循环遍历 `list` 中的所有元素,并通过 `->` 运算符来访问指针对象的成员函数。由于 `std::unique_ptr` 重载了 `->` 运算符,因此可以像访问普通指针一样访问对象的成员函数。
需要注意的是,由于 `std::unique_ptr` 是独占所有权的智能指针,因此不能将其拷贝或赋值给其他指针。因此,在遍历访问 `std::list` 中的元素时,我们使用了 `const auto&` 类型的引用,以防止复制 `std::unique_ptr`。
阅读全文