以临时对象为参数的C++对象构造函数

C++ Object Constructor with Temporary Object as Argument

本文关键字:C++ 对象 构造函数 参数 临时对象      更新时间:2023-10-16

我写了一些代码,突然想到我所做的可能是一个非常糟糕的主意。这是一个抽象的例子。关键点是通过矢量的参考。

// vector.hpp
class vector {
    vector(double x, double y, double z);
}
// particle.hpp
class particle {
    particle(const vector& _init_position);
    vector m_position;
}

所以我写了一些代码来表示class vector,它包含3D向量的东西,还写了一个粒子类,它的位置向量可以用构造函数和向量实例初始化。

在我的main()函数中,我使用了一个临时对象来初始化粒子对象,如下所示:

int main() {
    particle my_particle(vector(0.0, 1.0, 2.0)); // Temp vector instance - problem?
}

在这里,您可以看到创建了一个临时向量实例,我假设它被放置在堆栈的某个地方,然后调用粒子的构造函数。

这可以吗?或者这是一个非常糟糕的代码示例?我怀疑后者,因为我是通过引用传递的,因此临时向量的实例可能无效?

希望有人能澄清这一点?

允许将临时对象作为值或常量引用参数传递给函数。这是一件好事,因为在传递const引用时可以保存副本。

您没有显示向量构造函数的实现,但成员是一个值,所以我假设构造函数正在将其参数复制到成员。如果是这种情况,那么传递const-ref正是您想要做的,以避免不必要的复制。

你不想做的是保留对该论点的引用(或地址)。