1

私はこれが間違っていることに気づきました(私のコンパイラはそう言っています!):

Rectangle& Rectangle::Overlap(const Rectangle& rectangle) {

    Point topLeft(__max(this->GetVerticies()[0]->GetX(), rectangle.GetVerticies()[0]->GetX()) - __min(this->GetVerticies()[0]->GetX() + this->GetWidth(), rectangle.GetVerticies()[0]->GetX() + rectangle.GetWidth()), 
                 (__max(this->GetVerticies()[0]->GetY(), rectangle.GetVerticies()[0]->GetY()) - __min(this->GetVerticies()[0]->GetY() + this->GetHeight(), rectangle.GetVerticies()[0]->GetY() + rectangle.GetHeight())));

    Point bottomRight(__min(this->GetVerticies()[0]->GetX() + this->GetWidth(), rectangle.GetVerticies()[0]->GetX() + rectangle.GetWidth()), topLeft.GetY() + __max(this->GetVerticies()[0]->GetY() + this->GetHeight(), rectangle.GetVerticies()[0]->GetY() + rectangle.GetHeight()));

    return Rectangle(topLeft, bottomRight);
}

メモリリークを発生させずに計算された長方形を返す正しい方法は何でしょうか?長方形をRectangle*result = new Rectangle(topLeft、bottomRight)として定義し、逆参照されたポインターを返すことは機能しますが、間違っているように見えます。助言がありますか?

4

4 に答える 4

4

値で返すか:

Rectangle Rectangle::Overlap(const Rectangle& rectangle);

関数本体を変更したり、結果を返すために追加のパラメーターを追加したりする必要はありません。

void Rectangle::Overlap(const Rectangle& rectangle, Rectangle& out);

結果を out パラメータに代入します。

于 2010-12-17T01:24:11.187 に答える
3

戻り値の型を非参照 (値) にします。次に、暗黙のコピーコンストラクターを使用して、戻り値は問題ありません...

于 2010-12-17T01:23:03.247 に答える
3

戻り値の型をRectangle(sans the reference) に変更するだけです。

于 2010-12-17T01:23:15.337 に答える
3

Rectangle への参照ではなく Rectangle を返すだけです。

于 2010-12-17T01:24:11.230 に答える