返回通过常量引用在堆上创建的 object

Returning a object created on heap by constant reference

我在返回对在堆上创建的 object 的常量引用时遇到问题。

在我的 header 中,我定义了两个 heap-objects 像这样(使用 C++11 语法)

private:
    Type1 *type1 = nullptr;
    Type2 *type2 = nullptr;

和两个 getter 这样的方法

public: 
    Type1 &GetType1() const;
    Type2 &GetType2() const;

现在在我的源文件中,我正尝试按如下方式进行

Type1 &GetType1() const
{
    return this->type1;
}

Type2 &GetType2() const
{
    return this->type2;
}

为了简单起见,我排除了对空值和错误处理的检查。

现在编译器抱怨

invalid initialization of reference of type ‘type1&’ from expression of type ‘type* const’

当它显然不是常量指针而是常量引用时,为什么它向我显示我尝试从常量指针进行转换?

type1 是一个指针。您需要取消引用它才能访问对象本身。

你还应该决定你是想要一个 const 引用(在这种情况下函数可以而且应该是 const)还是一个可变引用(在这种情况下它可以,但也许不应该,是 const)。如果您愿意,可以同时提供两个重载:

Type1 const &GetType1() const {return *type1;}
Type1       &GetType1()       {return *type1;}

如果对象不是 const,则该函数可用于获取可修改的引用,否则为只读引用。