c++智能指针做函数返回值使用
时间: 2023-11-27 09:40:30 浏览: 254
智能指针作为函数返回值可以有效地管理动态内存,避免内存泄漏和空指针访问等问题。一般情况下,建议使用 unique_ptr 和 shared_ptr 作为函数的返回值。其中:
1. unique_ptr 适用于只能有一个所有权的情况,返回时需要使用 std::move 将指针所有权转移给调用方。
2. shared_ptr 适用于多个所有权的情况,返回时可以直接返回 shared_ptr,调用方可以通过复制或移动 shared_ptr 获取所有权。
例如,假设有一个函数返回一个指向动态分配的对象的指针:
```c++
std::unique_ptr<MyObject> createMyObject() {
std::unique_ptr<MyObject> obj(new MyObject());
// ...初始化 obj
return obj;
}
```
调用该函数时,可以使用 std::move 将指针所有权转移给变量:
```c++
std::unique_ptr<MyObject> obj = createMyObject();
```
如果需要多个所有权,则可以改为使用 shared_ptr:
```c++
std::shared_ptr<MyObject> createMyObject() {
std::shared_ptr<MyObject> obj(new MyObject());
// ...初始化 obj
return obj;
}
```
调用该函数时,可以直接复制或移动 shared_ptr,多个变量可以共享指针的所有权:
```c++
std::shared_ptr<MyObject> obj1 = createMyObject();
std::shared_ptr<MyObject> obj2 = obj1;
```
阅读全文