私はプロジェクト用の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)
コピーが作成され、正常に動作します。ここに私の質問があります:私はコンストラクターを2回(本質的に)呼び出しましたが、それを回避する方法はありますか?次に、このメソッドを次のような別のメソッドの引数として使用する場合
foo.multiply(&Vector::subtract(foo, bar), 5)
それでもコピーが作成されますか、それともVector :: extractメソッドでスコープ外になったポインターを渡すだけですか?
より一般的には、これを行うための最良の(または少なくともより良い方法はありますか)方法は何ですか?