高级指针
时间: 2025-05-16 08:01:34 浏览: 9
### 高级指针的概念与使用方法
#### 函数指针
函数指针是一种特殊的指针类型,它指向的是函数而非数据。通过函数指针,程序可以在运行时动态决定调用哪个函数,这在实现回调机制或其他复杂逻辑时非常有用。
例如,在C语言中定义并使用函数指针的方式如下所示:
```c
#include <stdio.h>
void funcA() {
printf("Function A\n");
}
void funcB() {
printf("Function B\n");
}
int main() {
void (*funcPtr)(); // 声明一个指向返回值为空的函数指针
funcPtr = &funcA; // 将函数指针赋值为 funcA 的地址
funcPtr(); // 调用 funcA()
funcPtr = &funcB; // 修改函数指针为 funcB 的地址
funcPtr(); // 调用 funcB()
return 0;
}
```
这种灵活性使得函数指针成为构建模块化和可扩展软件的重要工具[^4]。
#### 成员函数指针 (C++)
在C++中,类的成员函数也有对应的指针形式。然而,由于成员函数通常依赖于特定的对象实例(即`this`指针),因此它们的处理方式比普通函数更复杂。
下面是一个简单的例子展示如何声明和使用非静态成员函数指针:
```cpp
class MyClass {
public:
int value;
MyClass(int v):value(v){};
void displayValue(){
std::cout << "The Value is : "<< this->value<<std::endl;
}
};
typedef void(MyClass::*MemberFuncPtr)();
int main(){
MemberFuncPtr ptrToMemFunc=&MyClass::displayValue;
MyClass obj(10);
(obj.*ptrToMemFunc)();
return 0;
}
```
这里需要注意的是语法 `(obj.*ptrToMemFunc)` 中的小圆点操作符 `*` 和箭头的区别在于对象是否已经存在或者只是作为指针传递给另一个结构体或类。
#### 动态内存管理中的高级技巧
除了基本的新建 (`new`) 和删除 (`delete`) 外,还可以利用智能指针来自动管理堆上分配的对象生命周期,从而减少手动释放资源带来的风险。标准库提供了诸如 `unique_ptr`, `shared_ptr` 等模板类用于简化这些过程[^3]。
```cpp
#include <memory>
#include <iostream>
struct Foo{
~Foo(){std::cout<<"Destructor Called"<<std::endl;}
};
int main(){
auto foo=std::make_unique<Foo>();
} // 当离开作用域时,“Destructor Called”会被打印出来
```
上述代码片段展示了现代C++推荐的做法——借助RAII原则让编译器替我们完成必要的清理工作。
阅读全文
相关推荐











