c++ - 在 C++ 中返回一个类

标签 c++ object

在 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/

相关文章:

c++ - 如何在 SystemC 中使用结构作为信号类型?

c++ - gcc 4.7 和递归 constexpr 函数

javascript - 遍历 JavaScript 对象 - 我错过了什么?

javascript - ExtendScript Illustrator 放置的项目名称

java - 将多个对象写入和读取到文件

c++ - gcc shared_ptr复制赋值实现

c++ - 如何在一个类中声明另一个类的实例

c++ - 带有 3 个选项的 C++ 中的 elsif 指令

Python:如果调用 setter 则调用函数?

java - java.lang.Object 的 protected 方法如何免受子类的影响?