unique_ptr用法
时间: 2023-07-29 15:12:27 浏览: 64
unique_ptr 是 C++11 引入的一种智能指针,它可以管理一个动态分配的对象并确保在不再需要时释放这个对象的内存。它的使用方法如下:
1. 创建 unique_ptr 对象
```c++
std::unique_ptr<int> p(new int(10));
```
2. 访问指针指向的对象
```c++
int value = *p;
```
3. 释放指针指向的对象
```c++
p.reset();
```
4. 传递指针指向的对象
```c++
void func(std::unique_ptr<int> p) {
// do something
}
int main() {
std::unique_ptr<int> p(new int(10));
func(std::move(p));
return 0;
}
```
需要注意的是,unique_ptr 对象不能被复制,只能被移动。因此,如果需要将 unique_ptr 对象传递给函数,需要使用 std::move() 函数将其转移。
相关问题
unique_ptr方法
unique_ptr是C++11中引入的一种智能指针,用于管理动态分配的对象。它的特点是独占式拥有权,即同一时间只能有一个unique_ptr指向一个对象,当unique_ptr被销毁时,它所指向的对象也会被销毁。unique_ptr提供了多种方法来操作指针,包括reset、release、get等方法。同时,unique_ptr还支持移动语义,可以通过std::move将一个unique_ptr的所有权转移给另一个unique_ptr,从而实现资源的转移和管理。在使用unique_ptr时需要注意,不能将一个unique_ptr赋值给另一个unique_ptr,除非使用std::move进行转移。而将一个unique_ptr作为函数参数传递时,可以使用左值引用的方式,保证函数调用后unique_ptr仍然占有指向的资源。
shared_ptr和unique_ptr、weak_ptr的区别
shared_ptr、unique_ptr和weak_ptr是C++中智能指针的三种常见类型。
1. shared_ptr:是一种引用计数智能指针。多个shared_ptr可以共享同一个对象,通过内部的引用计数来管理对象的生命周期。当最后一个shared_ptr被销毁时,对象会被自动释放。可以使用make_shared函数创建shared_ptr。
2. unique_ptr:是一种独占所有权的智能指针。只能有一个unique_ptr指向一个对象,不能进行复制或共享所有权。当unique_ptr被销毁时,对象也会被自动释放。可以使用make_unique函数创建unique_ptr。
3. weak_ptr:是一种弱引用智能指针。它指向一个由shared_ptr管理的对象,但并不增加引用计数。当最后一个shared_ptr被销毁时,即使还有weak_ptr指向对象,对象也会被释放。可以通过lock()方法获取一个可用的shared_ptr来操作对象。
区别:
- 所有三种智能指针都提供了自动释放内存的功能,避免了手动调用delete。
- shared_ptr适用于多个指针共享同一个对象的场景,它维护一个引用计数来跟踪对象的生命周期。
- unique_ptr适用于独占所有权的场景,只能有一个unique_ptr指向一个对象。
- weak_ptr用于解决shared_ptr的循环引用问题,它可以被shared_ptr或者expired成空指针的lock()方法获取一个可用的shared_ptr。
总结:选择哪种智能指针取决于具体的需求。如果需要共享所有权,可以使用shared_ptr;如果需要独占所有权,可以使用unique_ptr;如果需要解决循环引用问题,可以使用weak_ptr。