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;
}
答案 0 :(得分:5)
您应该按值返回对象,而不是引用。将您的声明更改为:
Klub novKlub(Clen &c)
函数永远不会返回对本地对象的引用,因为它会在函数返回时被销毁而留下悬空引用。
更新:如果无法更改签名,则仍应返回对本地的引用。在这种情况下,可能的目的是创建插入到某个容器中的对象,然后在该容器中返回对它的引用。您没有提供足够详细的关于您的课程的详细信息,但可能会将其插入clenovi
或c
。如果您提供更多细节,可以澄清。
答案 1 :(得分:5)
鉴于您正在创建新对象,请按值返回。
要求返回参考的情况有些限制(见下文)。你的情况不是其中之一。
问题是我应该返回什么[如果我想返回参考资料]
您应该返回一个具有静态生命周期的对象,或者调用者已知的生命周期。确保调用者不需要释放您的对象。
我试图只返回一个在课堂上新创建的对象,它不能正常工作
您不应要求调用者释放您通过引用返回的对象,因此不能选择返回新创建的对象。
我也试过返回引用或指针,但它没有工作。
返回时,您需要返回一个不超出范围的对象。通常你想返回
*this
或this->someField
或<<
覆盖中非常常见的模式),或