如何正确将Bar实例中的Foo指针以引用方式传入函数?
解决方案:通过Bar指针调用接收Foo引用的函数
先把你给出的代码整理成更清晰的形式:
class Foo { public: int x; }; class Bar { public: Foo *foo; }; // 创建Bar实例 Bar *bar; bar = new Bar(); // 需要调用的目标函数 void func(Foo &foo);
要通过bar->foo正确调用func,核心是完成指针到引用的转换,具体写法很简单:
func(*(bar->foo));
为什么这么写?
bar->foo是Foo*类型的指针,它只存着Foo对象的内存地址;- 而
func需要的参数是Foo&——也就是Foo对象的引用(可以理解为对象的"别名"); - 用
*运算符解引用指针,就能获取到指针指向的实际Foo对象,C++会自动把这个对象转换成对应的引用类型传递给func。
重要提醒:空指针防护
实际开发里一定要注意,如果bar本身是空指针,或者bar->foo是空指针,直接解引用会触发未定义行为(比如程序崩溃)。所以建议先做空指针检查:
if (bar != nullptr && bar->foo != nullptr) { func(*(bar->foo)); }
这样就能避免因为空指针导致的意外问题啦~
内容的提问来源于stack exchange,提问作者gornvix
相关产品推荐
相关产品推荐

