在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;
}

在每种情况下,都允许调用函数访问不再存在的对象。

您不得返回指向本地的指针或引用。您可以返回本地副本。

09-05 01:26
查看更多