vector<unique_ptr>
时间: 2023-12-16 13:03:22 浏览: 78
vector<unique_ptr>是一个存储unique_ptr的动态数组,其中每个元素都是一个unique_ptr对象,每个对象都拥有独特的所有权。unique_ptr是一个智能指针,它提供了对动态分配对象的所有权和管理。当unique_ptr超出范围时,它将自动删除其所拥有的对象。下面是一个vector<unique_ptr>的例子:
```cpp
#include <iostream>
#include <vector>
#include <memory>
int main() {
std::vector<std::unique_ptr<int>> vec;
vec.push_back(std::make_unique<int>(1));
vec.push_back(std::make_unique<int>(2));
vec.push_back(std::make_unique<int>(3));
for (const auto& ptr : vec) {
std::cout << *ptr << " ";
}
// 输出:1 2 3
return 0;
}
```
相关问题
std::vector<std::unique_ptr<>>
std::vector<std::unique_ptr<>>是一种容器类型,它可以存储指向动态分配对象的智能指针。每个智能指针都负责管理其指向的对象的内存释放。下面是一个示例演示如何使用std::vector<std::unique_ptr<>>:
```cpp
#include <iostream>
#include <memory>
#include <vector>
class MyObject {
public:
MyObject(int value) : m_value(value) {
std::cout << "Constructing MyObject with value: " << m_value << std::endl;
}
~MyObject() {
std::cout << "Destructing MyObject with value: " << m_value << std::endl;
}
void printValue() {
std::cout << "Value: " << m_value << std::endl;
}
private:
int m_value;
};
int main() {
std::vector<std::unique_ptr<MyObject>> objects;
objects.push_back(std::make_unique<MyObject>(1));
objects.push_back(std::make_unique<MyObject>(2));
objects.push_back(std::make_unique<MyObject>(3));
for (const auto& obj : objects) {
obj->printValue();
}
return 0;
}
```
这个例子创建了一个std::vector<std::unique_ptr<MyObject>>,并向其中添加了三个MyObject对象。当vector离开作用域时,它会自动释放所有的MyObject对象。在循环中,我们打印了每个对象的值。
构造函数如何初始化vector<unique_ptr<Student>> vec
假设 `Student` 是一个类,可以使用以下代码初始化 `vector<unique_ptr<Student>> vec`:
```c++
vector<unique_ptr<Student>> vec;
// 添加元素到 vec 中
vec.push_back(make_unique<Student>("John"));
vec.push_back(make_unique<Student>("Jane"));
vec.push_back(make_unique<Student>("Bob"));
```
在上述代码中,我们使用了 `make_unique` 函数来创建 `unique_ptr` 对象并将其添加到 `vec` 中。注意,在使用 `make_unique` 函数时,需要传递 `Student` 类的构造函数所需的参数。这里我们假设 `Student` 类的构造函数接受一个 `const string&` 类型的参数。
阅读全文