std::unique_ptr<Json::CharReader> jsonReader{ readerBuilder.newCharReader()};
时间: 2024-05-19 19:12:32 浏览: 249
This line of code creates a new `std::unique_ptr` object named `jsonReader`, which is a smart pointer that owns and manages a dynamically allocated `Json::CharReader` object. The `newCharReader()` function is called on an instance of `Json::CharReaderBuilder`, which returns a pointer to a new `Json::CharReader` object. The `std::unique_ptr` takes ownership of this object and will automatically delete it when it goes out of scope.
相关问题
std::unique_ptr创建指针的案例
`std::unique_ptr` 是C++标准库中的智能指针,它用于管理动态分配的对象,确保内存得到正确的释放。以下是创建和操作`std::unique_ptr`的一些示例:
1. **使用移动构造转移所有权**[^1]:
```cpp
// 创建一个std::unique_ptr并初始化
std::unique_ptr<int> ptr1 = std::make_unique<int>(10);
// 使用移动构造,将ptr1的所有权转移到新的unique_ptr(ptr2)
std::unique_ptr<int> ptr2 = std::move(ptr1);
```
在这个例子中,`ptr1`的所有权被转移给`ptr2`,而`ptr1`本身变为无效。
2. **尝试复制构造会失败**:
```cpp
// 这是错误的,因为std::unique_ptr不允许复制构造
std::unique_ptr<int> ptr1 = std::make_unique<int>(10);
std::unique_ptr<int> ptr2 = ptr1; // 报错:unique_ptr不支持复制构造
```
由于`std::unique_ptr`的设计,每次对它的赋值实际上是所有权的转移,而非简单的复制。
vector<unique_ptr>
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;
}
```
阅读全文