返回一个通过常量引用在堆上创建的对象

Returning a object created on heap by constant reference

本文关键字:引用 创建 对象 常量 一个 返回      更新时间:2023-10-16

我有一个问题,返回一个常量引用的对象是在堆上创建的。

在我的头中,我定义了两个堆对象,像这样(使用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;
}

为了简单起见,我已经排除了null检查和错误处理。

编译器报错

从表达式中初始化类型' type1& '引用无效类型' type* const '

为什么它告诉我,我试图从一个常量指针转换,当它显然不是一个常量指针,而是一个常量引用?

type1是一个指针。您需要解引用它来访问对象本身。

您还应该决定是否需要const引用(在这种情况下,函数可以并且应该是const)或可变引用(在这种情况下,它可以,但可能不应该是const)。如果愿意,可以同时提供两个重载:

Type1 const &GetType1() const {return *type1;}
Type1       &GetType1()       {return *type1;}
如果对象不是const,则该函数可用于获取可修改的引用,否则为只读引用。