从具有引用返回类型的函数返回什么?

时间:2016-06-03 10:13:19

标签: c++ function

Bike(int speed1) {
    this.speed = speed1;
    System.out.println(speed1);
    Vehicle vehicle = new Vehicle();
    vehicle.speed();
}

问题是我应该返回什么?我试图只返回一个在课堂上新创建的对象,它不起作用,我也尝试返回引用或指针,它还没有工作

className &temp (someOtherclassName &c)

以下是所有代码:

Klub &novKlub(Clen &c){
    Klub newKlub;
    strcpy(newKlub.name, name);

    for(int i = 0; i < elements; i++){
        if(c.getLevel() == clenovi->getLevel()){
            newKlub += clenovi[i];

        }

    }
    return newKlub;
}

2 个答案:

答案 0 :(得分:5)

您应该按值返回对象,而不是引用。将您的声明更改为:

Klub novKlub(Clen &c)

函数永远不会返回对本地对象的引用,因为它会在函数返回时被销毁而留下悬空引用。

更新:如果无法更改签名,则仍应返回对本地的引用。在这种情况下,可能的目的是创建插入到某个容器中的对象,然后在该容器中返回对它的引用。您没有提供足够详细的关于您的课程的详细信息,但可能会将其插入clenovic。如果您提供更多细节,可以澄清。

答案 1 :(得分:5)

鉴于您正在创建新对象,请按值返回。

要求返回参考的情况有些限制(见下文)。你的情况不是其中之一。

  

问题是我应该返回什么[如果我想返回参考资料]

您应该返回一个具有静态生命周期的对象,或者调用者已知的生命周期。确保调用者不需要释放您的对象。

  

我试图只返回一个在课堂上新创建的对象,它不能正常工作

您不应要求调用者释放您通过引用返回的对象,因此不能选择返回新创建的对象。

  

我也试过返回引用或指针,但它没有工作。

返回时,您需要返回一个不超出范围的对象。通常你想返回

  • 您的对象本身,即*this
  • 您对象的一个​​家属,即this->someField
  • 您的一个函数参数(这是<<覆盖中非常常见的模式),或
  • 静态或全局变量(不推荐)。