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

时间:2013-08-26 22:49:58

标签: c++ vector initialization object-initializers temporary-objects

我写了一些代码,突然想到我正在做的事情可能是一个非常糟糕的主意。这是一个抽象的例子。关键点是通过引用传递。

// 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?
}

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

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

希望有人可以澄清一下吗?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

您不想做的是继续引用该参数(或地址)。