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

时间:2015-05-28 12:29:37

标签: c++ pointers reference constants getter-setter

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

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

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

现在编译器抱怨

  

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

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

1 个答案:

答案 0 :(得分:3)

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

您还应该决定是否需要const引用(在这种情况下函数可以,应该是const)或可变引用(在这种情况下它可以,但也许不应该&# 39; t,是const)。如果您愿意,可以提供两种重载:

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

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