std::unique_ptr
时间: 2023-07-19 22:56:28 浏览: 32
std::unique_ptr 是 C++11 中的一个智能指针类模板,用于管理动态分配的对象。它是一种独占式智能指针,即同一时间只能有一个 std::unique_ptr 指向一个对象,因此它不能被拷贝,只能通过移动语义转移所有权。std::unique_ptr 提供了自动释放内存的功能,当 std::unique_ptr 超出作用域或被显式地释放时,它所指向的对象将被自动删除。
使用 std::unique_ptr 的好处是可以避免手动管理动态内存分配,有效地防止内存泄漏和悬垂指针等问题。同时,由于 std::unique_ptr 不支持拷贝,可以避免拷贝构造函数和拷贝赋值函数的调用,提高程序性能。
相关问题
std::unique_ptr reset
std::unique_ptr的reset函数用于重新设置unique_ptr所拥有的资源。当调用reset时,unique_ptr会释放当前拥有的资源(如果有的话),然后接管新的资源。
例如,假设我们有一个unique_ptr指向一个对象:
```cpp
std::unique_ptr<int> ptr(new int(5));
```
我们可以使用reset函数来重新设置指针的值:
```cpp
ptr.reset(new int(10));
```
在上述代码中,ptr首先释放原来的资源(值为5的int对象),然后接管新的资源(值为10的int对象)。
需要注意的是,调用reset时,unique_ptr会自动删除先前的资源,因此不需要手动删除。此外,reset还可以用于将unique_ptr重置为nullptr,不拥有任何资源:
```cpp
ptr.reset();
```
在上述代码中,ptr会释放它之前拥有的资源,并将其重置为nullptr。
std::unique_ptr构造
std::unique_ptr构造函数有多种常用的方式。其中一种是通过直接使用指针初始化,例如:std::unique_ptr<int> p(new int(5)); 这样会创建一个指向int类型的智能指针p,它指向一个值为5的int对象。另一种方式是使用std::make_unique函数,例如:auto q = std::make_unique<int>(10); 这样会创建一个指向int类型的智能指针q,它指向一个值为10的int对象。还有一种方式是使用std::move函数转移指针的所有权,例如:std::unique_ptr<int> r = std::move(p); 这样会将指针p的所有权转移给指针r,使得r指向原来p所指的对象。这样做后,p指针将变为无效的。总之,std::unique_ptr提供了多种灵活的构造方式,以适应不同的使用场景。<span class="em">1</span><span class="em">2</span><span class="em">3</span>