class如何用指针传参C++
时间: 2025-07-06 17:49:25 浏览: 14
### 如何在C++中通过指针传递类参数
当涉及到通过指针传递类对象作为函数参数时,在C++中有几种方法可以实现这一点。一种常见的方式是利用指向该类实例的指针来调用成员函数或访问数据成员。
#### 使用普通指针传递类对象
下面展示了一个简单的例子,说明如何创建一个`Person`类并使用指针将其作为一个参数传给另一个函数:
```cpp
#include <iostream>
using namespace std;
class Person {
public:
string name;
int age;
void introduceYourself() const {
cout << "Name: " << name << ", Age: " << age << endl;
}
};
void greet(Person* personPtr) {
(*personPtr).introduceYourself(); // 或者写成 personPtr->introduceYourself();
}
int main(){
Person john{"John", 30};
greet(&john);
}
```
这里展示了两种不同的方式去调用成员函数:解引用操作符(`*`)加上点运算符`.` 和箭头运算符 `->`[^1]。
#### 利用智能指针管理资源
为了更好地管理和释放动态分配的对象所占用的内存,推荐采用智能指针如`std::unique_ptr<T>`或者`std::shared_ptr<T>`. 下面的例子演示了怎样运用这些工具安全地处理类类型的参数:
```cpp
#include <memory>
// 定义一个工厂函数用于构建新的Person对象,并返回其所有权转移至 unique_ptr 中.
std::unique_ptr<Person> create_person(const string& n, int a){
auto p = make_unique<Person>();
p->name = n;
p->age = a;
return p;
}
void greetSmart(std::unique_ptr<Person>& personPtr){
personPtr->introduceYourself();
}
int main(){
auto jane = create_person("Jane", 25);
greetSmart(jane);
// 当jane超出范围时会自动销毁它持有的资源。
}
```
在这个版本里,`create_person()` 函数负责初始化一个新的 `Person` 对象并将它的控制权交给调用方;而 `greetSmart()` 接受的是一个左值引用到 `std::unique_ptr<Person>` 类型上,这意味着它可以修改原始指针的内容但是不会夺取其所有权.
阅读全文
相关推荐




















