-2

私は C++ にまったく慣れていないので、まだポインターをよく理解していません。

これは問題ありません。2 つの非ポインター オブジェクトがあります。

Vec2D A(0, 0), B(10, 10);
Vec2D C = A-B;

しかし、もし1つがポインタなら?

Vec2D::minus(Vec2D B) {
    Vec2D that = Vec2D(this->x(), this->y());
    return that-B;
}

質問: B での操作でポインターthisを使用するにはどうすればよいですか?-

また、メソッドで構築されるオブジェクトの数と、参照を渡してメモリ消費を最適化する方法もわかりません..

4

2 に答える 2

1

私があなたの質問を正しく受け取った場合..「これはポインターです。非ポインターを必要とするメソッドを使用して、それと他のポインターを操作するにはどうすればよいですか?」

逆参照演算子を使用します* 例:

Vec2D that = *this;

2 番目の質問に答えるには:

  • のパラメータとして渡すオブジェクトが作成されますminus
  • オブジェクトはによって作成されますVec2D(this->x(), this->y())(ただし、優れた最適化コンパイラによって一時的に消去される可能性があります)
  • スタック上にオブジェクトが作成された ( that)
  • それらをどのように実装したか、およびコンパイラがどれだけ優れているかに応じて、コピーコンストラクタ/オペレータ=で別のオブジェクトを作成できます
  • オブジェクト (またはそれ以上) は、オペレーターによって作成される場合があります。that-B
  • 返されるオブジェクトが作成されます(戻り値の最適化はすべてのコンパイラーによって行われるため、2つではなく1つだけです)

どのように最適化できますか?参照を使用してください...

Vec2D Vec2D::minus(const Vec2D& B) {
   return that-*this;
}

また、 Vec2D に operator- を実装して、参照も使用します... 一般に、パラメーターを (const) 参照として渡します。

明らかに、戻り値に対して同じことを行うことはできません (試してみると、コンパイラは文句を言うでしょう..); これらにもテクニックがあります (特に CG/ゲームでは、ベクターを使用して、オブジェクト プールが多く使用されているのを見てきました。参照/ポインターを返すものは実際には可能ですが、かなり高度なものです)

于 2013-05-09T15:30:08.547 に答える
0

「this」ポインターは、呼び出されるメソッドを含むオブジェクトへの自動生成ポインターです。

を呼び出すA.minus(B)と、「this」ポインタは A を指します。

于 2013-05-09T15:28:13.617 に答える