在Java中,所有类都是真正的引用,我这样做:
Car getCar(int mileage)
{
Car car = new Car();
car.setMileage(mileage);
return car;
}
在C++中,我该怎么做?我可以引用一下:
void getCar(int mileage, Car& car)
{
car.setMileage(mileage);
return true;
}
或者,我可以创建一个新对象:
Car* getCar(int mileage)
{
Car* car = new Car;
car.setMileage(mileage);
return car;
}
但随后,调用者还负责删除
car
。我不想返回一个指针。我要退车:
Car getCar(int mileage)
{
Car car;
car.setMileage(mileage);
return car;
}
但是,当然,
car
是一个局部变量,函数完成后将被删除。通常,这样做的“标准”方式是什么?最好的方法是什么,为什么?
最佳答案
最后一个示例是返回对象的正确且惯用的方式:
Car getCar(int mileage)
{
Car car;
car.setMileage(mileage);
return car;
}
是的,
car
将在函数末尾删除,但不会在复制到返回的对象之前删除。您可以像这样调用此函数:{
Car myCar;
myCar = getCar(42);
}
本地化的
car
被复制到调用环境的getCar
中。您不能也不应该做的是返回对局部变量的引用或指针。
这是错误的:
Car& getCar(int mileage)
{
Car car;
return car;
}
这也是错误的:
Car* getCar(int mileage)
{
Car car;
return &car;
}
在每种情况下,都允许调用函数访问不再存在的对象。
您不得返回指向本地的指针或引用。您可以返回本地副本。