在堆栈上创建临时对象作为参数

时间:2016-04-30 13:35:35

标签: c++ stack heap

在没有垃圾收集器指针的任何编程语言中我都可以

DrawLine(new Vector(0, 0), new Vector(100, 100));

但是在C ++中,如果DrawLine不负责删除其参数,我们就不能这样做,因此使用两个向量DrawLine(0,0)调用(100,100)的最短方法是:

Vector v(0, 0);
Vector w(100, 100);
DrawLine(v, w);

有没有办法将它变成一个声明?特别是如果vw只是该单个函数的参数而没有其他函数使用它,那么它似乎有点冗长。为什么我不能做以下事情:

DrawLine(Vector(0, 0), Vector(100, 100));

1 个答案:

答案 0 :(得分:2)

  

为什么我不能像以下那样做:

DrawLine(Vector(0, 0), Vector(100, 100));

您正在尝试将临时变量作为参数传递。你可以在3个案例中做到这一点。

  1. 如果DrawLine接受const引用传递的参数:

    void DrawLine(const Vector& v1, const Vector& v2);

  2. 如果可以复制Vector,并且DrawLine接受按值传递的参数:

    void DrawLine(Vector v1, Vector v2);

  3. 如果Vector可以移动,DrawLine接受rvalue引用传递的参数:

    void DrawLine(Vector&& v1, Vector&& v2);

  4. 唯一失败的情况是通过非const引用传递参数,因为临时变量无法绑定到它。

    void DrawLine(Vector& v1, Vector& v2);