2017-06-24 6 views
0

こんにちは私はBallクラスを持っています。粒子からベクトルをメンバーとして持つクラスデストラクタ

class Ball: public Pang::particle { 
private: 
    double radio; 
    double rcolor, gcolor, bcolor; // Range 0.0-1.0 Color (given in RGB space) 

継承:

class particle { 

protected: 

    double mass; 
    vector3 position; 
    vector3 velocity; 

    vector3 acceleration; 
    vector3 forceAccumulator; 

    int state; 
    double time_remaining; 


public: 

    particle(); 
    particle(const particle &rhs) 
    { 
    mass=rhs.mass; 
    position = rhs.position; 
    velocity = rhs.velocity; 
    acceleration = rhs.acceleration; 
    forceAccumulator = rhs.forceAccumulator; 
    state = rhs.state; 
    time_remaining = rhs.time_remaining; 

    } 

だから私の疑問はここで私はpangScenarioクラスを持っている:私はPangScenarioにベクトルを使うよう

namespace Pang { 

class PangScenario { 
    friend class ReflexAgentAI; 
    friend class SimulationAI; 
private: 

    //Attributes are:Four planes, each one representing a plane (scenario margin). el valor de position 
    //Plane top; 
    Plane bottomBorder; 
    Plane leftBorder; 
    Plane rightBorder; 

    double limitPlane; 

    //A ball positioned on it. 
    //Ball scenarioBall; 
    vector<Ball> playingBalls; 
    character* characterPlayerOne; 
    character* characterPlayerTwo; 
    Ball* projectilePlayerOne; 
    Ball* projectilePlayerTwo; 
    double lastShotPlayerOne; 
    double lastShotPlayerTwo; 

    double lastDeadPlayerOne; 
    double lastDeadPlayerTwo; 

    int scorePlayerOne; 
    int scorePlayerTwo; 
    int livesPlayerOne; 
    int livesPlayerTwo; 
    int numberVictoriesPlayerOne; 
    int numberVictoriesPlayerTwo; 
    int numberTies; 

    double widthGameField; // in meters 
    double heightGameField; // in meters 

    //friend ReflexAgentAI; 

public: 
    PangScenario(); 
    PangScenario(double width, double height); 
    PangScenario(const PangScenario &rhs); 
    virtual ~PangScenario() 
    { 
     if (projectilePlayerOne) delete projectilePlayerOne; 
     if (projectilePlayerTwo) delete projectilePlayerTwo; 
     if (characterPlayerOne) delete characterPlayerOne; 
     if (characterPlayerTwo) delete characterPlayerTwo; 
     //delete playingBalls; 
    } 

だから、私は追加する必要がありますかPangScenarioのデストラクタのplayingBallsにベクトルのデストラクタ?もしそうなら、私はどのようにそれを行うことができますか?おそらく、単純な

for(int i=0 ; i < playingBalls.size(); ++i) { 
    //pd = *it; 
    playingBalls.erase(i); or delete playingBalls[i]; 
} 

::のような

何かplayingBalls.clear();あなたはvectorを破壊する必要はありません事前

+0

これはどのようなプログラミング言語ですか?それはC++ですか?ご使用の言語で質問にタグを付けてください。あなたの質問を更新するには、投稿の下の** "[編集]" **リンクをクリックしてください。ありがとうございました。 – Pang

答えて

0

PangScenario

感謝のデストラクタ内側十分だろう。それはオブジェクトであり、オブジェクトへのポインタではないので、あなたはそのクリーンアップの責任を負いません。 PangScenarioクラスのインスタンスがスコープ外になると、そのすべてのメンバー変数が破棄されます。

vector<Ball> *があった場合は、deleteに割り当てられたメモリに気を付ける必要があります。

最後に、clearのベクターも必要ありません。 vector自身のデストラクタは、自身を掃除します。

+0

デストラクタは大丈夫ですか?私はあなたがそのコメントを見ることができるように削除playingBallsのいずれかをする必要はありません...ありがとう –

+0

それは正しいです。 'playingBalls'を削除する必要はありません。また、何らかの方法でそれをクリーンアップしようとする必要はありません。デストラクターでは、削除が必要な4つのオブジェクトを正しく削除します。 –

関連する問題