我正在为一个项目编写一个 C++ 矢量类,我很难决定如何最好地编写一些方法。在我开始之前,我会说这个类有一个很好的复制构造函数和赋值运算符(这将在几秒钟内相关)。该类有一组静态方法,当我想确保两个参数都没有被更改时,它们返回向量,它们具有如下签名:
Vector* Vector::subtract(const Vector* v, const Vector* u)
{
double outX = v->myX - u->myX;
double outY = v->myY - u->myY;
double outZ = v->myZ - u->myZ;
return new Vector(outX, outY, outZ);
}
我遇到的问题是,如果我能提供帮助,我不想返回指针。所以相反我做了一些测试并意识到如果我只是说
return Vector(outX, outY, outZ)
然后分配结果
Vector foo = Vector::subtract(bar, temp)
它将创建一个副本并正常工作。这就是我的问题所在:我刚刚调用了构造函数两次(基本上)有没有办法解决这个问题?其次,如果我将此方法用作另一种方法的参数,例如
foo.multiply(&Vector::subtract(foo, bar), 5)
它还会创建一个副本,还是我只是传递了 Vector::subtract 方法中超出范围的指针?
更一般地说,最好的(或至少有更好的)方法是什么?