1

まず、この質問の前に次の点を付けさせてください: 1) この問題について Stackexchange を検索しました。提示されたコードのほとんどは、これについて新しい質問をする/新しいスレッドを開くことを保証するために従うのが難しいものでした。 . 私が見つけた最も近いものは、同じ名前の複数のクラスオブジェクトを作成していますか? c++残念ながら、これは私の理解の範囲をはるかに超えています

2) http://www.cplusplus.com/doc/tutorial/classes/はこれについて実際に議論していないか、見逃しています。

これで邪魔になりません:

長方形クラスコード:

class Rectangle {
private:
    int lineNumber;
    float valueMax;
    float valueMin;
public:
    Rectangle(SCStudyInterfaceRef sc, int lineNumber, float valueMax, float valueMin);
    int getLineNumber(); // member function of class
    float getValueMax(); // member function of class Rectangle
    float getValueMin(); // member function of class Rectangle
};

Rectangle::Rectangle(SCStudyInterfaceRef sc, int lineNumber0, float value1, float value2) {
    lineNumber = lineNumber0;
    int value2_greater_than_value1 = sc.FormattedEvaluate(value2, sc.BaseGraphValueFormat, GREATER_OPERATOR, value1, sc.BaseGraphValueFormat); 
    if (value2_greater_than_value1 == 1) {
        valueMax = value2;
        valueMin = value1;
    } else {
        valueMax = value1;
        valueMin = value2;
    }
}

int Rectangle::getLineNumber() {
    return lineNumber;
}

float Rectangle::getValueMax() {
    return valueMax;
}

float Rectangle::getValueMin() {
    return valueMin;
}

さらに重要な部分は次のとおりです。このコードはほぼループで実行されており、特定のイベントがトリガーされるたびに繰り返されます。

bool xxx = Conditions here

if (xxx) { 
// Draw new rectangle using plattforms code
code here

// Save rectangle information in the list:
Rectangle rect(sc, linenumbr + indexvalue, high, low);
(*p_LowRectanglesList).push_back(rect);
} 

bool yyy = conditions here

if (Short) { 
// Draw new rectangle using plattforms code
code here

// Save rectangle information in the list:
Rectangle rect(sc, linenumber + indexvalue, high, low);
(*p_HighRectanglesList).push_back(rect);

}

したがって、質問は次のとおりです。

これは、イベントがトリガーされてコードの 2 番目の部分が実行されるたびにループされるため、bool 条件がチェックされ、true の場合はプラットフォーム統合コードを使用して四角形を描画します。描画が完了すると、この情報はコードの最初の部分で Rectangle クラスに基づいて新しい長方形オブジェクト/インスタンスに渡されますRectangle rect(sc, linenumber + indexvalue, high, low);。今のところコードは関係ありません。

新しい Bool = True 条件があり、コードが既に実行された後に実行されると、正確にはどうなりますか? 古い長方形オブジェクトは、同じ名前で新しいパラメーターを使用する新しい長方形オブジェクトに単純に置き換えられますか (コードの記述方法によりインスタンスごとに変更されるため)。それとも、同じ名前 "rect" を使用する Rectangle クラスの 2 つのオブジェクトがありますか?

(*p_HighRectanglesList).push_back(rect);とにかくコードの一部を使用してパラメータの情報をリストにプッシュする必要があるため、技術的に言えばそれほど重要ではありません

TL;DR: "rect" は破棄/上書きされますか、それとも "rect" と呼ばれる長方形オブジェクト/インスタンスが無数に存在する可能性がありますか?

テキストの壁についてお詫び申し上げますが、完全な初心者であるため、間違っている場所を修正しやすくするために、私の思考プロセスの概要を説明するのが最善だと思いました.

よろしく、オービタル

4

2 に答える 2

0

追加するには、NEW を呼び出すたびに、基本的にメモリを割り当て、Rectangle オブジェクトを作成します。NEW は各インスタンスにアドレスを割り当てます。ポインター *rect は現在のメモリ アドレスを指し、再度 NEW で rect を呼び出すと、rect は新しいメモリ アドレスを指し、前のアドレスは NULL 参照になります。ただし、C++ では、ガベージ コレクターがある Java とは異なり、メモリ リークを心配する必要があります。

于 2013-07-16T20:12:56.693 に答える