智能指针作为函数形参举例
时间: 2023-11-11 19:41:56 浏览: 88
当智能指针作为函数形参时,可以使用以下示例来说明不同的用法:
1. 使用 `std::unique_ptr`:
```cpp
void ProcessData(std::unique_ptr<int> data) {
// 操作 data 指向的资源
// ...
}
int main() {
std::unique_ptr<int> ptr = std::make_unique<int>(42);
ProcessData(std::move(ptr)); // 传递独占所有权
// 此时 ptr 不再拥有资源
}
```
2. 使用 `const std::unique_ptr&`:
```cpp
void PrintData(const std::unique_ptr<int>& data) {
// 读取 data 指向的资源
// ...
}
int main() {
std::unique_ptr<int> ptr = std::make_unique<int>(42);
PrintData(ptr); // 传递常引用,避免拷贝构造
}
```
3. 使用 `std::shared_ptr`:
```cpp
void ProcessData(std::shared_ptr<int> data) {
// 操作 data 指向的资源
// ...
}
int main() {
std::shared_ptr<int> ptr = std::make_shared<int>(42);
ProcessData(ptr); // 传递共享所有权
// ptr 仍然拥有资源,直到最后一个引用销毁
}
```
4. 使用裸指针和 `const MyClass&`:
```cpp
void PrintData(const MyClass& obj) {
// 使用 obj 进行操作,不涉及智能指针的所有权管理
// ...
}
int main() {
std::shared_ptr<MyClass> ptr = std::make_shared<MyClass>(args);
PrintData(*ptr); // 通过解引用传递对象的引用
}
```
这些示例展示了使用不同类型的智能指针作为函数形参的场景,你可以根据具体的需求选择适合的方式来传递和管理资源的所有权。
阅读全文