在 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
是一个局部变量,一旦函数完成,它就会被删除。
执行此操作的“标准”方法通常是什么?哪种方法最好,为什么?
最佳答案
你的最后一段代码很好——你返回的是局部变量的值,而不是局部变量本身,所以发生的事情是(至少在理论上)该值将从局部变量复制到调用者分配它的任何地方。
这基本上和我有类似的东西一样:
int f() {
int x = 0;
return x;
}
我们再次返回一个值。该值恰好来自 局部变量,但我们仍然返回值,而不是变量。
就“至少在理论上”部分而言,大多数编译器都可以对其进行优化,因此根本不会真正进行复制。有一些特殊规则允许编译器跳过执行此复制,即使复制会产生您希望在复制发生时看到的外部可见副作用(例如,如果您编写一个复制构造函数在复制发生了)。
关于c++ - 在 C++ 中返回一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10407379/