【问题标题】:C++ when you dereference a pointer to a class object and then return it as a reference, can you call methods on this referenceC ++当您取消引用指向类对象的指针然后将其作为引用返回时,您可以在此引用上调用方法吗
【发布时间】:2026-01-14 00:35:01
【问题描述】:

在下面的代码中CompositionalModel 是一个抽象类。 OpModel 类提供了虚函数的实现。

CompilationUnit 类中有一个成员变量model,它是一个指向OpModel 类的指针。

我的问题是:方法model() 取消引用指针并将其作为CompositionalModel 类型的引用返回。当您取消引用指针并将其作为引用返回时,您现在可以调用方法的对象吗?

【问题讨论】:

  • 是的,你可以。你可以简单地尝试一下。
  • 为什么你认为这不可能?你遇到了什么问题?无意冒犯,但如果没有这些信息,这个问题就毫无意义
  • 请注意,如果model_ 未在CompilationUnit::CompilationUnit() 中初始化或存储nullptr,则*model_ 将返回无效引用。在这种情况下,访问此引用是未定义的行为。 (如果你很幸运,你的程序只是崩溃了,你可以在核心转储/调试器中看到任何原因。)为了清楚起见,你也可以公开 CompilationUnit::CompilationUnit() 的实现。

标签: c++ class pointers inheritance reference


【解决方案1】:

C++ 当你取消引用指向类对象的指针然后将它作为引用返回时,你能在这个引用上调用方法吗

是的,您可以调用引用的成员函数。

但是,请注意,如果指针不指向(兼容类型的)对象,则间接(即取消引用)指针具有未定义的行为。在您的示例程序中,model_ 从未初始化为指向一个对象,因此该示例具有 UB。

【讨论】:

    最近更新 更多